Sub Hungry4Gages()
Dim x As Workbook
Dim y As Workbook
'## Open both workbooks first:
Set x = Workbooks.Open("C:\Users\dguitron\Documents\Belize and Sam Project\Class 1\run_10296500.xlsm")
Set y = ActiveWorkbook
'Now, copy what you want from x:
x.Sheets("dashboard").Range("D17").Copy
'Now, paste to y worksheet:
y.Sheets("Class1").Range("A1").PasteSpecial
'Close x:
x.Close
End Sub
“dashboard”是我从中复制的工作表的名称,“Class1”是我在活动工作簿上粘贴的工作表。
我收到y.sheets(Class1)的错误“下标超出范围”....
答案 0 :(得分:3)
在您当前的代码中
Set x = Workbooks.Open("C:\Users\dguitron\Documents\Belize and Sam Project\Class 1\run_10296500.xlsm")
Set y = ActiveWorkbook
Workbooks.Open
语句会打开一个工作簿,然后该工作簿将成为活动工作簿。因此,x
和y
都指向同一个工作簿。
所以你需要切换订单:
Set y = ActiveWorkbook
Set x = Workbooks.Open("C:\Users\dguitron\Documents\Belize and Sam Project\Class 1\run_10296500.xlsm")
正如Jeeped指出的那样,如果您的宏位于要设置y
的工作簿中,则可以使用Set y = ThisWorkbook
然后订单不重要,或者您可以使用{{ 1}}否则您将使用ThisWorkbook
。
(就个人而言,我仍然会设置对“静态”的引用,因为缺少一个更好的单词,首先是工作簿,然后去打开其他工作簿并设置它们的对象引用 - 但这只是我个人的偏好,基于我想我正在做什么。)
答案 1 :(得分:1)
如果不使用external reference打开源工作簿,您可以更快地获取值:
[Class1!A1].Formula = "='C:\Users\dguitron\Documents\Belize and Sam Project\Class 1\[run_10296500.xlsm]dashboard'!D17"
[Class1!A1] = [Class1!A1].Value ' optional to convert the formula to value