Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1768to1772
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA - Bereiche Kopieren
29.06.2020 01:44:48
Julian
Hallo lieber Mitglieder,
ich hab mir zur Aufgabe gemacht mittels VBA Daten aus Spaltenbereichen eines Arbeitsblattes ("Kontoblatt" Spalten A, B und E) in ein anderes Arbeitsblatt (Database Zahlungsverkehr F, C und J) der selben Mappe zu Kopieren. Dies soll nach Möglichkeit mittels Button-Click erfolgen. Der Button soll auf dem Ziel-Arbeitsblatt vorhanden sein.
Spalte A zu F ist ein Datum
Spalten B zu C und E zu J sind reine Zahlen
Beide Arbeitsblätter bestehen noch aus weiteren Spalten mit Daten die aber nicht kopiert werden sollen.
Das Arbeitsblatt ("Kontoblatt") aus welchem die Daten Kopiert werden sollen beginnt in Spalte A, das Arbeitsblatt ("Database Zahlungsverkehr") in welches diese eingefügt werden soll mit Spalte B.
Das Arbeitsblatt aus welchem die Daten kopiert werden wird nach dem Kopieren geleert (hier würde ein manuelles löschen genügen) und dann jeweils wieder mit Daten gefüllt werden, aus einem anderen Programm (manuell). Bzw. würde ich unten stehenden Code so ergänzen:
Set wsCopy = Workbooks("Mappe1.xlsx").Worksheets("Kontoblatt")
Set wsDest = Workbooks("Mappe2.xlsm").Worksheets("Database Zahlungsverkehr")
Die Daten soll dann im Ziel-Arbeitsblatt in die nächst leere Zeile eingefügt werden. Dies soll als Datenbank dienen und fortlaufend befüllt werden.
Momentan erhalte ich eine "eine(?! eventuell auch mehr)" Fehlermeldungen.
Laufzeitfehler 1004: Die Methode 'Range' für das Objekt' _Worksheet' Ist fehlgeschlagen
Da ich absoluter Anfänger bin und den Fehler leider nicht selber beheben kann habe ich gehofft das Ihr mir helfen könnt. Wahrscheinlich ist der Code auch absoluter murks, da ich mir diesen mittels Google Suche und Youtube selber zusammengebastelt habe.
  • 
    Private Sub CommandButton1_Click()
    Dim wsCopy As Worksheet, wsDest As Worksheet
    Dim lDestLastRow As Long, Index As Long
    Dim SourceArr As Variant, DestArr As Variant
    Dim Source As Range, Dest As Range
    Set wsCopy = ThisWorkbook.Worksheets("Kontoblatt")
    Set wsDest = ThisWorkbook.Worksheets("Database Zahlungsverkehr")
    With wsDest
    lDestLastRow = .Range("B" & .Rows.Count).End(xlUp).Row + 1
    End With
    SourceArr = Array("A", "B", "E")
    DestArr = Array("F", "C", "J")
    For Index = LBound(SourceArr) To UBound(SourceArr)
    Set Source = wsCopy.Range(SourceArr(Index))
    Set Dest = wsDest.Range(DestArr(Index) & lDestLastRow)
    Source.Copy
    Dest.PasteSpecial (xlPasteValues)
    Next Index
    End Sub
    

  • Danke Euch bereits jetzt
    Julian

    8
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: VBA - Bereiche Kopieren
    29.06.2020 05:34:06
    Hajo_Zi
    Hallo Julian,
    Du gibst bei Range nur die Spalte an und keine Zeile. Soll nur eine Zelle kopiert wewrden?
    benutze Columns

    AW: VBA - Bereiche Kopieren
    29.06.2020 07:00:10
    Luschi
    Hallo Julian.
    beim 1. Durchlauf der For-Schleife ergibt
    Range(SourceArr(Index)) den Ausdruck 'Range("A")' - Das ist aber kein gültiger Bezeichner für ein Range-Objekt; es fehlt die Zeilennummer bzw. ein4e Bereichsangabe in Form von 'A1:A?'.
    Gruß von Luschi
    aus klein-Paris
    AW: VBA - Bereiche Kopieren
    29.06.2020 12:16:49
    Julian
    Hallo Hajo und Luschi,
    Danke für Eure Tipps! Leider kommt aber genau an dieser Stelle meine VBA Unkenntnis zum Tragen...ich kann mein Fehler/Problem einfach nicht selber beheben. Ich habe mir zwar schon massig viele Beiträge zum Kopieren und meiner Problematik der Range durchgelesen, aber ich kann dies einfach nicht auf meinen Code anwenden.
    @Hajo - Es sollen die gesamten Spaltenbereiche aus "Kontoblatt" von den Spalten A2:A B2:B und E2:E kopiert werden und in "Database Zahlungsverkehr" Spalte F, C und J an der letzten Zeile eingefügt werden.
    Ich wäre euch sehr dankbar wenn ihr mir nochmal helfen könntet.
    Anzeige
    AW: VBA - Bereiche Kopieren
    29.06.2020 13:20:49
    MCO
    Hallo Julian!
    Dann mußt du dir das zusammenbasteln:
    Ist: Range("A")
    Soll Range("A2:A999")
    Set Source = wsCopy.Range(SourceArr(Index) & "2:" & SourceArr(Index) & wsCopy.UsedRange.Rows.Count)
    
    Damit läuft der Code auf jeden Fall.
    Wenn aber die IF-Bedingung noch mit rein soll, mußt du die Schleife anders aufbauen, dann mußt du Zeile für Zeile durchgehen.
    Etwas so:
    For Each Datensatz In wsCopy.Range("B:B").SpecialCells(xlCellTypeConstants)
    If Datensatz = wsCopy.Cells(Datensatz.Row, "I") Then
    For Index = LBound(SourceArr) To UBound(SourceArr)
    wsCopy.Cells(Datensatz.Row, SourceArr(Index)).Copy
    wsDest.Range(DestArr(Index) & lDestLastRow).PasteSpecial (xlPasteValues)
    Next Index
    End If
    Next Datensatz
    
    Außerdem ist es nicht korrekt, den Code ins Tabellenblatt zu schreiben, das hab ich mal geändert.
    Das funktionierende Werk findest du hier:
    https://www.herber.de/bbs/user/138630.xlsm
    Gruß, MCO
    Anzeige
    AW: VBA - Bereiche Kopieren
    29.06.2020 15:40:05
    Julian
    Hallo MCO,
    tausend Dank für deine Hilfe! Es geht voran. Momentan versuche ich noch alles zu verstehen :D
    Den If bereich hatte ich erstmal nicht auch gleich gefragt, da ja bereits das einfache kopieren bei mir gescheitert ist. So ist es aber natürlich noch viel besser/schöner.
    1.
    Leider kopiert der Code gerade nur eine Zeile. Zeile 14 mit der Konstanten 31995.
    In der Zeile "I" stehen Kundencodes sämtlicher Kunden die relevant für "Database Zalungsverkehr" sind. Sprich nur Bewegungen dieser Kunden sollen von "Kontoblatt" zu "Database Zalungsverkehr" kopiert werden.
    2.
    Muss
    
    Application.ScreenUpdating = False
    
    wieder auf = True gesetzt werden oder spielt dies keine Rolle?
    Beste Grüße
    Julian
    Anzeige
    AW: VBA - Bereiche Kopieren
    30.06.2020 13:00:14
    MCO
    Hallo Julian!
    Der code kopiert schon alles, aber eben immer nur in 1 Zeile. Stehen bleibt halt nur das letzte.
    Die Definition der letzten Zeile muss immer wieder aktualisiert werden, wird bisher aber nur 1x gemacht. Das ist dann wohl ein Reihenfolgenproblem :-)
    So ist es richtig:
    For Each Datensatz In wsCopy.Range("B:B").SpecialCells(xlCellTypeConstants)
    lDestLastRow = wsDest.Range("B" & wsDest.Rows.Count).End(xlUp).Row + 1
    If Datensatz = wsCopy.Cells(Datensatz.Row, "I") Then
    For Index = LBound(SourceArr) To UBound(SourceArr)
    wsCopy.Cells(Datensatz.Row, SourceArr(Index)).Copy
    wsDest.Range(DestArr(Index) & lDestLastRow).PasteSpecial (xlPasteValues)
    Next Index
    End If
    Next Datensatz
    

    Application.ScreenUpdating = False
    
    stellt sich am Ende der Sub selbst wieder auf TRUE, bei anderen ist das NICHT so!
    Gruß, MCO
    Anzeige
    AW: VBA - Bereiche Kopieren
    30.06.2020 16:37:17
    Julian
    Hallo MCO,
    ich hab genau diese Zeile lange versucht zu schreiben und war nicht in der Lage. Ich Danke Dir erneut!!!
    Bei einer anderen Problematik mit dem Code habe ich mir jetzt mittels Sverweis, in dem entsprechenden Arbeitsblatt, und einer Art "walk around" selbst beholfen.
    Hier nochmal die Mappe:
    https://www.herber.de/bbs/user/138660.xlsm
    Beste Grüße
    Julian

    305 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige