it-swarm.com.de

Kopieren Sie aus einer Arbeitsmappe und fügen Sie sie in eine andere ein

Ich habe den folgenden Code geschrieben und sehe ständig pastespecial Methode der Klasse ist fehlgeschlagen. Ich habe versucht, dieses Problem zu lösen, aber nichts scheint zu funktionieren. Ich versuche, ein ganzes Blatt aus einem Arbeitsbuch zu kopieren und in ein anderes einzufügen:

Set x = Workbooks.Open(" path to copying book ")
Workbooks.Open(" path to copying book ").Activate
Range("A1").Select
'Cells.Select
Selection.Copy
Set y = Workbooks.Open("path to pasting book")
Workbooks.Open("Path to pasting book").Activate

With y
    Sheets("sheetname").Cells.Select
    Range("A1").PasteSpecial
    'Sheets("sheetname").PasteSpecial
    .Close
End With

With x
    .Close
End With
25
user2832896

Dies sollte es tun, lass es mich wissen, wenn du Probleme damit hast:

Sub foo()
Dim x As Workbook
Dim y As Workbook

'## Open both workbooks first:
Set x = Workbooks.Open(" path to copying book ")
Set y = Workbooks.Open(" path to destination book ")

'Now, copy what you want from x:
x.Sheets("name of copying sheet").Range("A1").Copy

'Now, paste to y worksheet:
y.Sheets("sheetname").Range("A1").PasteSpecial

'Close x:
x.Close

End Sub

Alternativ können Sie einfach:

Sub foo2()
Dim x As Workbook
Dim y As Workbook

'## Open both workbooks first:
Set x = Workbooks.Open(" path to copying book ")
Set y = Workbooks.Open(" path to destination book ")

'Now, transfer values from x to y:
y.Sheets("sheetname").Range("A1").Value = x.Sheets("name of copying sheet").Range("A1") 

'Close x:
x.Close

End Sub

So erweitern Sie dies auf das gesamte Blatt:

With x.Sheets("name of copying sheet").UsedRange
    'Now, paste to y worksheet:
    y.Sheets("sheet name").Range("A1").Resize( _
        .Rows.Count, .Columns.Count) = .Value
End With

Und noch eine andere Möglichkeit, den Wert als Variable zu speichern und die Variable in das Ziel zu schreiben:

Sub foo3()
Dim x As Workbook
Dim y As Workbook
Dim vals as Variant

'## Open both workbooks first:
Set x = Workbooks.Open(" path to copying book ")
Set y = Workbooks.Open(" path to destination book ")

'Store the value in a variable:
vals = x.Sheets("name of sheet").Range("A1").Value

'Use the variable to assign a value to the other file/sheet:
y.Sheets("sheetname").Range("A1").Value = vals 

'Close x:
x.Close

End Sub

Die letzte obige Methode ist normalerweise für die meisten Anwendungen die schnellste. Beachten Sie jedoch, dass bei sehr großen Datenmengen (100.000 Zeilen) festgestellt wird, dass die Zwischenablage den Array-Speicherauszug tatsächlich übertrifft:

Copy/PasteSpecial vs Range.Value = Range.Value

Das heißt, es gibt andere Überlegungen als nur die Geschwindigkeit, und es kann der Fall sein, dass die Leistung eines großen Datensatzes einen Kompromiss wert ist, um dies zu vermeiden Interaktion mit der Zwischenablage.

65
David Zemens

Sie haben mit Cells kopiert.
Wenn ja, müssen Sie PasteSpecial nicht einfügen, da Sie Daten mit genau demselben Format kopieren.
Hier ist Ihr Code mit einigen Korrekturen.

Dim x As Workbook, y As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet

Set x = Workbooks.Open("path to copying book")
Set y = Workbooks.Open("path to pasting book")

Set ws1 = x.Sheets("Sheet you want to copy from")
Set ws2 = y.Sheets("Sheet you want to copy to")

ws1.Cells.Copy ws2.cells
y.Close True
x.Close False

Wenn Sie jedoch wirklich etwas einfügen möchten, verwenden Sie zum Kopieren einen dynamischen Bereich ("Adresse").
So was:

ws1.Range("Address").Copy: ws2.Range("A1").PasteSpecial xlPasteValues
y.Close True
x.Close False

Beachten Sie die : Doppelpunkt nach dem .Copy die ein Statement Separating Zeichen.
Mit Object.PasteSpecial muss in einer neuen Zeile ausgeführt werden.
Hoffe, das bringt dich in Schwung.

5
L42