Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从一个工作簿复制并粘贴到另一个工作簿中_Excel_Vba - Fatal编程技术网

Excel 从一个工作簿复制并粘贴到另一个工作簿中

Excel 从一个工作簿复制并粘贴到另一个工作簿中,excel,vba,Excel,Vba,我已经写了下面的代码,不断地看到类的特殊方法失败了。我试图克服这个问题,但似乎没有任何效果。我正在尝试从一个工作簿复制整个工作表,并将其粘贴到另一个工作簿中: 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(

我已经写了下面的代码,不断地看到类的特殊方法失败了。我试图克服这个问题,但似乎没有任何效果。我正在尝试从一个工作簿复制整个工作表,并将其粘贴到另一个工作簿中:

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

这应该可以,如果您有问题,请告诉我:

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行),可以观察到剪贴板的性能实际上优于数组转储:


这就是说,除了速度之外,还有其他考虑因素,在这种情况下,对大型数据集的性能影响值得权衡,以避免与剪贴板交互。

您使用单元格复制。
如果是这样,则无需粘贴特殊内容,因为您正在以完全相同的格式复制数据。
这是您的代码和一些修复程序

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
后面,这是一个分隔字符的
语句。
使用
Object.PasteSpecial
需要在新行中执行。

希望这能让你成功。

试试
.Sheets(“sheetname”)…
.Range(“A1”).PasteSpecial
如果不起作用,请重新编写代码以避免
选择
方法,它笨重、难以解释、资源密集且效率低下:)David,非常感谢您的帮助!不幸的是,我收到一个复合错误,说“找不到方法或数据成员”,它突出显示了它试图复制的第一行“.Sheets”。您知道可能是什么问题吗?错误发生在以下位置:
工作表(“复制工作表的名称”)。范围(“A1”)。复制
??你能仔细检查一下你是否复制了它并且没有任何打字错误吗?我想不出你会出现这种错误的任何原因(即使是打字错误也会产生不同的错误信息),但请尝试上面我的答案中添加的两种替代方法。我使用了你建议的第二种方法,效果非常好!非常感谢你!David,我如何将单元格的等值扩展到整个表单的等值?我在上面添加了这些信息。