繁体   English   中英

VBA Excel工作簿对象变量

[英]VBA Excel Workbooks Object Variable

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

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

这些文件肯定存在于这些位置。 显然有很多事情要做。 请问我做错了什么?

谢谢。

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

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

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

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

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

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

根据https://msdn.microsoft.com/zh-cn/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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM