Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Range Copy Value

Forumthread: Range Copy Value

Range Copy Value
20.07.2017 11:41:22
Steve
Hallo, ich versuche aus einem Tabellenblatt Werte einer Spalte in die dazugehörige Spalte eines anderen Tabellenblattes (eines anderen Workbooks) zu kopieren.
Die Zieltabelle liefert mir die Formatierung, die Quelltabelle die Werte.
  • wbQuelle.Range((Cells(2, counter2)), Cells(lastrow_quelle, counter2)).Copy Destination:=wbZiel.Range(Cells(2, counter1), Cells(lastrow_quelle, counter1)), PasteSpecialPaste:=xlValues

  • Ich versuche an dieser Stelle nur die Werte zu kopieren. Die Spalten stimmen zwischen Quelle und Ziel nicht überein, diese werden anhand der Bezeichnung zugeordnet. Fehlermeldung: Laufzeitfehler
    Danke.
    Anzeige

    6
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Range Copy Value
    20.07.2017 11:59:28
    Michael
    Hallo!
    Innerhalb eines Copy-Befehls kannst Du PasteSpecial (das bei Dir auch noch falsch geschrieben ist) nicht nutzen. Dafür braucht es zwei Methoden, schematisch:
    Range("A3:A55").Copy
    Range("B3").PasteSpecial xlPasteValues
    
    Beachte: Es heißt NICHT PasteSpecialPaste:=xlValues...
    LG
    Michael
    Anzeige
    AW: Range Copy Value
    20.07.2017 12:49:57
    Steve
    
    wbQuelle.Range((Cells(2, counter2)), Cells(lastrow_quelle, counter2)).Copy
    wbZiel.Range(Cells(2, counter1), Cells(lastrow_quelle, counter1)).PasteSpecial xlPasteValues
    
    Bringt mir allerdings immer noch eine Fehlermeldung Laufzeitfehler 1004. Denke es liegt am .Range?!
    Anzeige
    AW: Range Copy Value
    20.07.2017 13:05:01
    Werner
    Hallo Steve,
    weil deine Referenzierung nicht stimmt. So wie du das schreibst muss vor allen Range-Objekten (Range, Cells) das entsprechende Blatt gesetzt werden.
    Das wäre dann so:
    wbQuelle.Range(wbQuelle.Cells(2, counter2), wbQuelle.Cells(lastrow_quelle, counter2)).Copy
    wbZiel.Range(wbZiel.Cells(2, counter1), wbZiel.Cells(lastrow_quelle, counter1)).PasteSpecial _
    xlPasteValues
    
    Zudem muss bei dieser Schreibweise Quell und Zielbereich gleich groß sein.
    Kürzere Schreibweise über eine With - End With Klammer. Da wird dann auf das beim With angegebene Blatt referenziert, indem vor den jeweiligen Range-Objekten (Range, Cells) ein Punkt gesetzt wird.
    Zudem reicht normalerweise beim Ziel die Angabe der linken oberen Zelle des Zielbereichs.
    Das wäre in deinem Fall:
    With wbQuelle
    .Range(.Cells(2, counter2), .Cells(lastrow_quelle, counter2)).Copy
    wbZiel.Cells(2, counter1).PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    End With
    
    Gruß Werner
    Anzeige
    AW: Range Copy Value
    20.07.2017 13:45:51
    Steve
    Vielen Dank.
    Läuft!!
    Gerne u. Danke für die Rückmeldung. o.w.T.
    20.07.2017 13:49:01
    Werner
    AW: Range Copy Value
    20.07.2017 13:05:39
    Michael
    Hallo!
    Denke es liegt am .Range?!
    Ja. Gib keinen Ziel-Bereich an, sondern eine Ziel-Zelle.
    Bsp.
    Range("A1:A24").Copy
    Range("C5").PasteSpecial xlPasteValues
    
    oder
    Range("A1:A24").Copy
    Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
    
    LG
    Michael
    Anzeige
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Anzeige

    Infobox / Tutorial

    Werte zwischen Tabellenblättern mit VBA kopieren


    Schritt-für-Schritt-Anleitung

    Um Werte von einem Tabellenblatt in ein anderes zu kopieren, kannst du die folgende VBA-Methode verwenden. Achte darauf, dass du die richtigen Referenzen für die Arbeitsmappen und -blätter verwendest.

    1. Öffne den VBA-Editor (Alt + F11).
    2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > "Einfügen" > "Modul").
    3. Kopiere und füge den folgenden Code ein:
    Sub CopyValuesBetweenSheets()
        Dim wbQuelle As Workbook
        Dim wbZiel As Workbook
        Dim counter1 As Long
        Dim counter2 As Long
        Dim lastrow_quelle As Long
    
        ' Setze die Arbeitsmappen
        Set wbQuelle = Workbooks("Quellarbeitsmappe.xlsx") ' Ändere den Namen entsprechend
        Set wbZiel = Workbooks("Zielarbeitsmappe.xlsx") ' Ändere den Namen entsprechend
    
        ' Definiere die Spalten
        counter1 = 1 ' Zielspalte
        counter2 = 2 ' Quellspalte
    
        ' Finde die letzte Zeile in der Quelltabelle
        lastrow_quelle = wbQuelle.Cells(Rows.Count, counter2).End(xlUp).Row
    
        ' Werte kopieren
        With wbQuelle
            .Range(.Cells(2, counter2), .Cells(lastrow_quelle, counter2)).Copy
            wbZiel.Cells(2, counter1).PasteSpecial xlPasteValues
            Application.CutCopyMode = False
        End With
    End Sub
    1. Passe die Namen der Arbeitsmappen und die Spalten an.
    2. Führe das Makro aus (F5).

    Dieses Skript kopiert nur die Werte und nicht die Formatierung, was für viele Anwendungen wichtig ist.


    Häufige Fehler und Lösungen

    • Laufzeitfehler 1004: Dieser Fehler tritt häufig auf, wenn die Referenzen zu den Zellen oder Bereichen nicht korrekt sind. Stelle sicher, dass du die Arbeitsmappen und ihre Zellen korrekt referenzierst, wie im Beispiel oben gezeigt.

    • PasteSpecial nicht korrekt: Stelle sicher, dass du PasteSpecial xlPasteValues verwendest und nicht PasteSpecialPaste:=xlValues, wie von Michael im Forum richtig angemerkt.

    • Referenzierung von Range und Cells: Wenn du Range oder Cells verwendest, musst du sicherstellen, dass du auf das entsprechende Arbeitsblatt zugreifst. Verwende die With-Anweisung, um die Lesbarkeit zu verbessern.


    Alternative Methoden

    Wenn du eine andere Methode bevorzugst, um Werte zu kopieren, kannst du die Value-Eigenschaft nutzen:

    wbZiel.Cells(2, counter1).Value = wbQuelle.Cells(2, counter2).Value

    Dies kopiert nur den Wert der ersten Zelle. Um einen Bereich zu kopieren, kannst du eine Schleife verwenden:

    Dim i As Long
    For i = 2 To lastrow_quelle
        wbZiel.Cells(i, counter1).Value = wbQuelle.Cells(i, counter2).Value
    Next i

    Praktische Beispiele

    Hier sind einige Beispiele, die dir helfen können, den vba range copy besser zu verstehen:

    1. Kopieren eines bestimmten Bereichs:
    Range("A1:A10").Copy
    Range("B1").PasteSpecial xlPasteValues
    1. Kopieren von der letzten Zeile in eine andere Spalte:
    Range("A1:A24").Copy
    Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues

    Tipps für Profis

    • Nutze die Application.CutCopyMode = False-Anweisung, um den Kopiermodus zu beenden und die Auswahl zu löschen.
    • Verwende die xlPasteValues-Option, um sicherzustellen, dass nur die Werte kopiert werden, ohne Formatierungen.
    • Experimentiere mit der With-Anweisung, um deinen Code lesbarer und effizienter zu gestalten.

    FAQ: Häufige Fragen

    1. Wie kann ich sicherstellen, dass nur Werte und keine Formate kopiert werden?
    Verwende PasteSpecial xlPasteValues, um nur die Werte zu kopieren.

    2. Was ist der Unterschied zwischen Range.Copy und Cells.Copy?
    Beide Methoden kopieren Daten, aber Range ist spezifisch für einen Bereich, während Cells auf eine bestimmte Zelle zugreift.

    3. Wie kann ich Fehler bei der Referenzierung vermeiden?
    Stelle sicher, dass du alle Range- und Cells-Objekte korrekt mit dem entsprechenden Arbeitsblatt referenzierst.

    4. Kann ich mehrere Bereiche gleichzeitig kopieren?
    Ja, du kannst mehrere Range-Bereiche in einer Schleife kopieren, achte jedoch darauf, dass die Zielbereiche entsprechend angepasst werden.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige