我有这个代码,我打开第一个工作簿,然后打开第二个工作簿,从第一个工作簿复制范围并将其粘贴到第二个工作簿中。
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
,它就可以正常工作......我&# 39;我真的很好奇打开第二个文件会使copyRange
变得混乱,以及为什么以后打开该文件会有所帮助。
答案 0 :(得分:2)
这取决于您在运行代码时处于活动状态的工作簿
这行代码可能会查看两个不同的工作簿:
Set copyRange = dataWorkbook.Worksheets("List").Range("A3:F3", Range("A3").End(xlDown))
。
dataWorkbook.Worksheets("List").Range("A3:F3"
- 这始终会查看List
中的dataWorkbook
表格。
Range("A3").End(xlDown)
- 当这些行没有被注释掉时,它始终会查看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
答案 1 :(得分:1)
试试这样:
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
,用于复制和粘贴。还有其他方法,以避免激活,但它的工作原理。最后,我关闭了两个工作簿,然后保存更改。
此外,Worksheets
由索引引用。