我想使用vba代码将单元格从一个工作簿复制到活动工作簿

时间:2017-04-14 23:55:09

标签: excel vba excel-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

“dashboard”是我从中复制的工作表的名称,“Class1”是我在活动工作簿上粘贴的工作表。

我收到y.sheets(Class1)的错误“下标超出范围”....

2 个答案:

答案 0 :(得分:3)

在您当前的代码中

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指出的那样,如果您的宏位于要设置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
相关问题