打开第二个工作簿时,应用程序定义或对象定义的错误

我有这个代码打开第一个工作簿,然后打开第二个工作簿,从第一个工作簿复制一个范围,并将其粘贴到第二个工作簿中。

Sub test() '**VARIABLES** Dim folderPath As String folderPath = "Y:\plan_graphs\final\mich_alco_test\files\" Dim fileTitle As String fileTitle = "5.xlsx" Dim dataWorkbook As Workbook Set dataWorkbook = Application.Workbooks.Open(folderPath & fileTitle) 'Dim resultWorkbook As Workbook 'Set resultWorkbook = Application.Workbooks.Open("Y:\plan_graphs\final\mich_alco_test\result.xlsx") Dim copyRange As Range Set copyRange = dataWorkbook.Worksheets("List1").Range("A3:F3", Range("A3").End(xlDown)) copyRange.Copy 'resultWorkbook.Worksheets("1").Range("A3").PasteSpecial Paste:=xlPasteFormulas End Sub 

但是我得到Application defined or object-defined error在线

 Set copyRange = dataWorkbook.Worksheets("List").Range("A3:F3", Range("A3").End(xlDown)) 

当我评论与第二个工作簿相关的行时,不会发生错误。 为什么会发生这个错误?

编辑 :有趣的是,如果我打开第二个工作簿之前定义和设置copyRange ,它工作正常…我真的很好奇打开第二个文件copyRange和为什么打开该文件后帮助。

这取决于在运行代码时,哪个工作簿处于活动状态。
这行代码可能会查看两个不同的工作簿:
Set copyRange = dataWorkbook.Worksheets("List").Range("A3:F3", Range("A3").End(xlDown))

dataWorkbook.Worksheets("List").Range("A3:F3" – 这总是查看dataWorkbook中的List表。

Range("A3").End(xlDown) – 当这些行没有被注释掉时,它总是查看当前在resultWorkBook中的活动resultWorkBook

使用:
Set copyRange = dataWorkbook.Worksheets("List").Range("A3:F3", dataWorkbook.Worksheets("List").Range("A3").End(xlDown))

要么

 With dataWorkbook.Worksheets("List") Set copyRange = .Range("A3:F3", .Range("A3").End(xlDown)) End With 

尝试像这样:

 Option Explicit Sub TestMe() Dim folderPath As String Dim dataWorkbook As Workbook Dim resultWorkbook As Workbook Dim copyRange As Range folderPath = "C:\Users\USER_CHANGE\Desktop\" Set dataWorkbook = Application.Workbooks.Open(folderPath & "5.xlsx") Set resultWorkbook = Application.Workbooks.Open(folderPath & "6.xlsx") dataWorkbook.Activate Set copyRange = dataWorkbook.Worksheets(1).Range("A3:F3", Range("A3").End(xlDown)) copyRange.Copy resultWorkbook.Worksheets(1).Range("A3").PasteSpecial Paste:=xlPasteFormulas dataWorkbook.Close True resultWorkbook.Close True End Sub 

我已经改变了一点folderPath,我已经添加了一个dataWorkbook.Activate ,复制和粘贴。 还有其他的方法,以避免激活,但它的作品。 最后,我closures这两个工作簿,并保存更改。

此外, Worksheets是按索引来表示的。