打开第二个工作簿时,应用程序定义或对象定义的错误
我有这个代码打开第一个工作簿,然后打开第二个工作簿,从第一个工作簿复制一个范围,并将其粘贴到第二个工作簿中。
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
是按索引来表示的。