我想使用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语句打开一个工作簿,然后成为活动工作簿 。 因此, xy都指向相同的工作簿。

所以你需要切换顺序:

 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