In anderes Arbeitsblatt kopieren -- > Zeilen nicht überschreiben

janny

Grünschnabel
Hallo,

ich bin Neuling bei VBA und muss für meine Chefin ein Makro programmieren. Es geht um folgendes: Ich möchte eine Tabelle mit Veranstaltungen programmieren. Jede einzelne Veranstaltung ist in einer Zeile und hat jeweils zwei Datumsangaben - einmal die Anmeldefrist und einmal der Beginn der Veranstaltung. Jetzt sollen die Veranstaltungen in verschiedene Arbeitsblätter sortiert werden. Un zwar so:

1. Das erste Arbeitsblatt soll Veranstaltungen enthalten, deren Anmeldefrist noch nicht abgelaufen ist und die noch nicht begonnen haben.
2. Das zweite zweite Arbeitsblatt soll Veranstaltungen enthalten, die noch nicht begonnen haben.
3. Das dritte Arbeitsblatt soll Veranstaltungen enthalten, deren Anmeldefrist abgelaufen sind und die schon begonnen haben.

Neue Veranstaltungen werden imimer im ersten Arbeitsblatt hinzugefügt. Ich möchte nun, dass sich die Veranstaltungen vom ersten Arbeitsblatt auf die anderen Arbeitsblätter aufteilen, wenn man auf einen Button klickt. Ich habe dafür auch schon einen VBA-Code programmiert, den ich irgendwie zusammengebastelt habe. Leider hat der Code ein Problem. Immer wenn das Makro startet, dann überschreibt er die vorhandenen Einträge in Arbeitsblatt 2 und 3. Ich möchte aber, dass die Zeilen, die vom ersten in das zweite und dritte Arbeitsblatt verschoben werden, an die vorhandenen Einträge angehangen werden. Ich habe auch schon gegoogelt. Irgendwo muss ich was einfügen, damit die Zeilen nicht überschrieben werden. Was mache ich bloß flasch? Kann mir jemand verraten, was ich verändern muss. Vielen Dank für eure Hilfe.

Jan


Hier der Code:


Sub Schaltfläche2_BeiKlick()

Dim a As Long, i As Long
Application.ScreenUpdating = False
a = 1


For i = Cells(Rows.Count, 2).End(xlUp).row To 1 Step -1
With Worksheets("Tabelle1")
If Date - Cells(i, 2) > Today Then Rows(i).Cut _
Destination:=Worksheets("Tabelle2").Rows(a)
a = a + 1

End With

Next i
Application.ScreenUpdating = True
End Sub
 
Du kannst versuchen herauszufinden wo die letzte Zeile im Zeil-Sheet ist und dann dort starten

Visual Basic:
Public Sub test()
    Dim source As Worksheet
    Dim target As Worksheet
    Dim LastRowNrInTarget As Long
    
    Set source = Me.Worksheets("Sheet1")
    Set target = Me.Worksheets("Sheet2")

    'letzte Ziele im Ziel berechnen
    LastRowNrInTarget = lastRowNr(target)

    For i = lastRowNr(source) To 1 Step -1
        'deine Bedinung
        If True Then
            'neue Zeile berechnen
            LastRowNrInTarget = LastRowNrInTarget + 1
            Call source.Rows(i).Cut(Destination:=target.Rows(LastRowNrInTarget))
        End If
    Next i

End Sub

'Funktion um die letzte Zeile zu ermitteln
'http://www.excel-inside.de/joomla/2009050487/VBA-Zellen-Bereiche/letzte-zeile-letzte-spalte-und-letzte-zelle-per-vba-ermitteln.html
Private Function lastRowNr(ByRef ws As Worksheet)
    lastRowNr = ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row
End Function
 
Hallo yaslaw,

vielen Dank für deine Hilfe. Ich habe den Code umgeschrieben und jetzt funktioniert alles. Super vielen Dank :)

janny
 
Hi,

habe über die Suchfunktion diesen Beitrag gesehen, weil ich vor einem ähnlichen Problem stehe.
Wobei bei mir ist es etwas anderes. Ich möchte die letzte Zelle in Spalte A ermitteln.
Dann soll aus verschiedenen Sheets bestimmte werte in die Zeile geschrieben werden.

Habe jetzt auch viel gesucht und jetzt halt diesen Code gefunden.

Was mir aber auch nur bedingt weiterhilft. Denn nicht jeder Sheet hat an der gleichen Stelle die Werte die ich übertragen will.
z.B. Sheet A hat 3 Werte die bei A3, A6 und A10 sind. In Sheet B ist es dann halt A5, A7 und A13.
Diese sollen dann nach und nach in die letzte Zeile geschrieben werden im "Datenbank"-Sheet, weil ich daraus dann die Diagramme erstellen will mit VB.

Also noch mal das Ziel ist es, im Sheet Datenbank in der letzten Zeile die leer ist die jeweiligen Daten aus den anderen Sheets einzutragen.
Wobei in der ersten Zeile das aktuelle Datum in Monat und Jahr ("MM-YYYY") angezeigt eingetragen werden soll.

Ich finde leider nur Codes die immer eine komplette Zeile kopieren oder etwas anderes machen als das was ich gerne möchte.
 
Zurück