Microsoft Excel

Herbers Excel/VBA-Archiv

Range Copy Value


Betrifft: Range Copy Value von: Steve
Geschrieben am: 20.07.2017 11:41:22

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.

      

    Betrifft: AW: Range Copy Value von: Michael (migre)
    Geschrieben am: 20.07.2017 11:59:28

    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


      

    Betrifft: AW: Range Copy Value von: Steve
    Geschrieben am: 20.07.2017 12:49:57

    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?!


      

    Betrifft: AW: Range Copy Value von: Werner
    Geschrieben am: 20.07.2017 13:05:01

    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


      

    Betrifft: AW: Range Copy Value von: Steve
    Geschrieben am: 20.07.2017 13:45:51

    Vielen Dank.

    Läuft!!


      

    Betrifft: Gerne u. Danke für die Rückmeldung. o.w.T. von: Werner
    Geschrieben am: 20.07.2017 13:49:01




      

    Betrifft: AW: Range Copy Value von: Michael (migre)
    Geschrieben am: 20.07.2017 13:05:39

    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