94 Aufrufe
Gefragt in Tabellenkalkulation von

Hallo, ich habe nie richtig VBA gelernt und mein Wissen ergoogelt. Aber jetzt komme ich seit zwei Tagen nicht weiter.

Ich habe eine Arbeitsblatt in das Daten per Formular eingetragen werden. Diese Daten möchte ich zum Teil in andere Arbeitsblätter kopieren. Ich habe dazu eine vereinfachte Beispieldatei erstellt.

Die Daten im Zielbereich sollen zunächst gelöscht werden, dann sollen die Daten aus dem Quellbereich in den Zielbereich geschrieben werden. Aus dem Quellbereich sollen aber nur bestimmte Spalten übertragen werden.

In meinem Code ist die Range fix. Wie bekomme ich es hin, dass alles bis zu letzten befüllten Zeile kopiert wird und ich den Code nicht anpassen muss, wenn ich über Zeile 9999 hinaus Daten habe?

so sieht der nicht funktionierende Code derzeit aus: https://supportnet.de/forum/?qa=blob&qa_blobid=6905156654516118622

Sub Daten_uebertragen2()

Worksheets("Ziel").Range("B3:E9999").ClearContents
Worksheets("Ziel").Range("B3:E9999").Value = Worksheets("Quelle").Range("B4:B9999,D4:F9999").Value


End Sub

Viele Grüße Ina

1 Antwort

0 Punkte
Beantwortet von beverly_ Experte (3.6k Punkte)

Hi Ina,

das lässt sich wie folgt lösen:

Sub Uebertragen()
    Dim lngQuelle As Long
    Dim lngZiel As Long
    Dim wkbQuelle As Worksheet
    Set wkbQuelle = Worksheets("Quelle")
    lngQuelle = wkbQuelle.Columns(2).Find(What:="*", SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious).Row
    With Worksheets("Ziel")
        lngZiel = .Columns(2).Find(What:="*", SearchOrder:=xlByRows, _
            SearchDirection:=xlPrevious).Row
        .Range(.Cells(3, 2), .Cells(lngZiel, 5)).ClearContents
        .Range(.Cells(3, 2), .Cells(lngQuelle - 1, 5)).Value = _
            wkbQuelle.Range(wkbQuelle.Cells(4, 2), wkbQuelle.Cells(lngQuelle, 5)).Value
    End With
End Sub

Bis später, Karin

...