我正在尝试设置两个工作簿变量 - 这是我的代码的前四行:
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
这些文件肯定存在于这些位置。显然很多学习要做。我做错了什么,拜托?
谢谢。
答案 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.aspx,Workbooks
集合仅包含当前打开的工作簿。该错误只是告诉您,此时请求的工作簿尚未打开。
您必须使用方法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")