在尝试关闭Excel 2007的 VBA工作簿之前,如何判断它的状态?

编程语言 2026-07-09

我发现(使用监视窗口时)工作簿至少有三种不同的状态。把定义为workbook的变量记作 wb

  1. wb 无法展开,且其值为 Nothing
  2. wb 可以展开,包含大量字段
  3. wb 可以展开,但没有字段,并且有一个孤立链接,其值为 <No Variables>

这些状态可以通过以下方式实现:

  1. 常规初始化,wb = Nothing 的初始值为

set wb = Nothing 2.这些语句:

Const scPathFile as String = "C:\Dir\abc.xlsx" Set wb = Workbooks.Open(scPathFile) 3.与第2条相同,但后面跟着:

wb.Close

因此,第三种状态是在工作簿关闭后、再次设置之前发生。问题在于我尚未找到一种识别该状态的方法。

  • 为了完整性,我尝试了所有的IsXXXX函数,但未能得到能指示所述状态的结果。
  • 我尝试用以下代码测试工作簿中的字段,例如 wb.Name

<b = isNull(wb.Name)>

  • 状态1然后 b = False
  • 状态2时会产生自动化错误(无论如何测试 wb.Name,都会出现相同的错误)。我无法使用 On Error 来处理这个错误。

是不是有些地方我漏掉了,还是这是一个设计问题?

解决方案

感谢这点,Tim。看起来确实起作用。问题归结为,你已经能够针对wb.Name捕捉到 ,而我对wb本身并没有捕捉到。这也许和类型有关。下面是一段简化的代码,展示它如何在wb.Name上工作:

Const scPathFile as String = "C:\Dir\abc.xlsx"

dim s as string

dim wb as workbook

set wb = workbooks.Open(scPathFile)

wb.Close

On Error Resume Next

s = wb.name

wb.Close

s的值为 ""。没有 On Error Resume Next 时,当工作簿尚未完成时会抛出自动化错误。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章