excel vba中全局variables的生命期是多less?

我有一个工作簿,声明一个全局variables,旨在保存一个COM对象。

Global obj As Object 

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

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

我可以看到它已经创build,当时我可以做一些COM调用。

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

 =Module.CallToComObject(....) 

模块内部我有一个function

 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。

有人可以解释我应该寻找什么可以导致这个?

这些都会重置全局variables:

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

这不一定是一个详尽的清单,但…

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