【发布时间】:2011-10-25 20:23:32
【问题描述】:
我有一个工作簿,它声明了一个用于保存 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。
有人可以解释一下我应该寻找什么会导致这种情况吗?
【问题讨论】:
-
你有多个函数调用你的 COM 对象,还是只有一个?如果只有一个,那么您可以考虑将其设置为函数中的静态变量:然后该函数可以检查它是否已初始化,如果没有,则对其进行初始化。
-
全局变量不是邪恶的吗?另外,我认为正确的关键字是
Public,而不是Global。
标签: vba excel global-variables