excel vba中全局变量的生命周期是多少?

cho*_*ida 18 excel vba global-variables excel-vba

我有一个工作簿,声明一个旨在保存COM对象的全局变量.

Global obj As Object
Run Code Online (Sandbox Code Playgroud)

我在Workbook_Open事件中初始化它,如下所示:

Set obj = CreateObject("ComObject.ComObject");
Run Code Online (Sandbox Code Playgroud)

我可以看到它已创建,那时我可以对它进行一些COM调用.

在我的工作表上,我有一堆看起来像的单元格:

=Module.CallToComObject(....)
Run Code Online (Sandbox Code Playgroud)

在模块内部,我有一个功能

Function CallToComObject(...)
   If obj Is Nothing Then
        CallToComObject= 0
    Else
        Dim result As Double
        result = obj.GetCalculatedValue(...)
        CallToComObject= result
    End If
End Function
Run Code Online (Sandbox Code Playgroud)

我可以看到这些工作有点,但在几张表刷新后,obj对象不再被初始化,即它被设置为Nothing.

有人可以解释一下我应该寻找什么导致这种情况吗?

Tim*_*ams 21

其中任何一个都将重置全局变量:

  1. 使用"结束"
  2. 未处理的运行时错误
  3. 编辑代码
  4. 关闭包含VB项目的工作簿

虽然这不一定是详尽的清单......

  • @Jon:自行结束 - "立即终止执行.从不需要自己,但可以放在程序中的任何地方以结束代码执行,关闭使用Open语句打开的文件并清除变量." (4认同)

Exc*_*ers 8

我建议除了上面的Tim 4之外还有第5点:逐步完成代码(调试)并在到达结束之前停止.可能这可能会取代第3点,因为编辑代码似乎不会导致全局变量丢失其值.