VBA Excel工作簿对象变量

时间:2015-03-02 20:25:31

标签: vba excel-vba excel

我正在尝试设置两个工作簿变量 - 这是我的代码的前四行:

Dim wb1 As Workbook
Dim wb2 As Workbook

Set wb1 = Workbooks("C:\Users\ShaneM\Documents\File1.xlsx")
Set wb2 = Workbooks("C:\Users\ShaneM\Documents\Computer Languages\VBA\File2.xlsm")

我在第3行得到的错误是:

Runtime error 9 - Subscript Out Of Range

这些文件肯定存在于这些位置。显然很多学习要做。我做错了什么,拜托?

谢谢。

2 个答案:

答案 0 :(得分:2)

.Workbooks()是在当前Application对象中打开的工作簿对象的集合(您不在代码中编写,但默认情况下会调用它)。

集合.Workbooks()转到out of range,因为您Application中的工作簿当前未打开;如果您想使用工作簿,事实上,您需要做的是将其打开到当前的Excel Application实例中:

Set wb1 = Workbooks.Open("C:\...")

这会导致工作簿显示,因为您在当前应用程序中打开,很遗憾无法以Visible=False模式打开它。但是,您可能希望将新的Excel实例设置为Visible = False,这样您就可以在不实际显示内容的情况下阅读内容。这意味着,在代码中:

Set excObj = CreateObject("Excel.Application")
excObj.Visible = False
Set wb1 = excObj.Workbooks.Open("C:\...")

请注意,我指定使用excObj打开工作簿,该工作簿不是当前Application,而是另一个故意设置为Visible = False的相同类型的对象。< / p>

答案 1 :(得分:1)

根据https://msdn.microsoft.com/en-us/library/office/ff841074.aspxWorkbooks集合仅包含当前打开的工作簿。该错误只是告诉您,此时请求的工作簿尚未打开。

您必须使用方法Workbooks.Open

Set wb1 = Workbooks.Open("C:\Users\ShaneM\Documents\File1.xlsx")

当工作簿已经打开时,您可以使用属性Workbooks.Item来获取对象(请注意,您可以省略.Item,因为它是Workbooks的默认属性集合)。

Set wb1 = Workbooks("File1.xlsx")

另请注意,已打开的工作簿的名称在同一应用程序中必须是唯一的。即以下工作:

Set wb1 = Workbooks.Open("C:\Folder1\File.xlsx")
Set wb2 = Workbooks.Open("C:\Folder2\File.xlsx")