我想使用vba代码将单元从一个工作簿复制到活动工作簿
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
“仪表板”是我从中复制的工作表的名称,“Class1”是我正在粘贴在活动工作簿上的工作表。
我得到y.sheets(Class1)的错误“下标超出范围”…
在你现在的代码中,你在做什么
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所指出的那样,如果你的macros是在你正在设置的工作簿中的,你可以使用Set y = ThisWorkbook
,然后这个顺序就不重要了,或者你可以在任何地方使用ThisWorkbook
。
(就我个人而言,我仍然会将“静态”的参考设置为“更好的单词”,工作簿,然后打开其他工作簿并设置其对象引用 – 但这只是我个人的偏好,基于我认为的方式关于我在做什么。)
无需使用外部参考打开源工作簿,您可以更快地获得该值:
[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