【发布时间】:2014-11-14 02:59:45
【问题描述】:
我有一个简单的问题(我认为)。假设我将 Book1 中标准模块中的全局变量设置为打开的(不同的)工作簿:
Public Sub InitGlobals()
Set gwkb = Workbooks("book2.xlsx")
End Sub
现在我手动关闭 book2.xlsx。 gwkb 的状态如何?这是我在即时窗口中运行各种测试时得到的结果:
?gwkb is nothing
False
?isempty(gwkb)
False
?isnull(gwkb)
False
但是,如果我询问 gwkb 的任何属性,例如 gwkb.Name,我会收到一个自动化错误。
我的问题是:有没有一种方法可以测试这种情况,而无需使用某种“On Error Resume Next”测试?
感谢您的帮助。
【问题讨论】:
-
以下post 是测试工作簿是否仍然打开的好方法。
-
@Gary's Student & PortlandRunner -- 感谢您的快速回复,但我真的不想测试 book2.xlsx 是否打开。我想知道使用 gwkb 是否仍然“安全”。例如,在我的应用程序中,我不知道 gwkb 设置为的确切文件名,但如果我尝试使用 gwkb.Name,则会收到错误消息。我想我想知道在 VBA 中是否可能存在 gwkb 的状态/测试,而不是“什么都没有”、“isNull”或“isEmpty”,以确定它是否仍然可以用作对象。也许我唯一的选择是编写一个像“bIsOK(gwkb)”这样的函数来检查错误?再次感谢。
-
如果 gwkb 仍然存在,那是因为您将其声明为公共或全局,而不是在子/函数内部,也没有将其作为参数传递。所以变量名仍然存在,但链接到一个空工作簿(或对象,取决于你如何声明它 - 未显示在你的代码中 -)