我编写了以下代码并不断看到类的pastespecial方法失败。我试图克服这个问题,但似乎没有任何效果。我试图从一本工作簿中复制整张表,然后将其粘贴到另一本工作簿中:
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
答案 0 :(得分:64)
这应该这样做,如果你遇到问题,请告诉我:
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
或者,您可以:
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
将此扩展到整个工作表:
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
另一种方法是,将值存储为变量并将变量写入目标:
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
上面的最后一种方法对于大多数应用程序来说通常是最快的,但请注意,对于非常大的数据集(100k行),观察到剪贴板实际上优于数组转储:
Copy/PasteSpecial vs Range.Value = Range.Value
也就是说,除了速度之外还有其他注意事项,并且可能是大型数据集上的性能值得权衡,以避免与剪贴板交互。
答案 1 :(得分:5)
您使用细胞复制 如果是这样,则不需要PasteSpecial,因为您以完全相同的格式复制数据 这是你的代码,有一些修复。
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
但是,如果您确实要粘贴特殊内容,请使用动态范围(“地址”)进行复制。
像这样:
ws1.Range("Address").Copy: ws2.Range("A1").PasteSpecial xlPasteValues
y.Close True
x.Close False
记下:
后面的.Copy
冒号Statement Separating
字符。
使用Object.PasteSpecial
需要在新行中执行
希望这能帮到你。