我有一个工作簿,声明一个全局变量,旨在容纳一个COM对象。什么是excel vba中全局变量的生命周期?
Global obj As Object
我initalize它在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”。 –