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

时间:2011-08-12 13:57:40

标签: excel vba excel-vba global-variables

我有一个工作簿,声明了一个用于保存COM对象的全局变量。

Global obj As Object

我在Workbook_Open事件中将其初始化为:

Set obj = CreateObject("ComObject.ComObject");

我可以看到它被创建了,那时我可以对它进行一些COM调用。

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

=Module.CallToComObject(....)

在模块内部我有一个功能

Function CallToComObject(...)
   If obj Is Nothing Then
        CallToComObject= 0
    Else
        Dim result As Double
        result = obj.GetCalculatedValue(...)
        CallToComObject= result
    End If
End Function

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

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

2 个答案:

答案 0 :(得分:20)

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

  1. 使用“结束”
  2. 未处理的运行时错误
  3. 编辑代码
  4. 关闭包含VB项目的工作簿
  5. 虽然这不一定是详尽的清单......

答案 1 :(得分:8)

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