Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel vba中全局变量的生存期是多少?_Vba_Excel_Global Variables - Fatal编程技术网

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

excel vba中全局变量的生存期是多少?,vba,excel,global-variables,Vba,Excel,Global Variables,我有一个工作簿,它声明了一个用于保存COM对象的全局变量 Global obj As Object 我在工作簿_Open事件中初始化它,如下所示: Set obj = CreateObject("ComObject.ComObject"); 我可以看到它被创建了,那时我可以对它进行一些COM调用 在我的床单上有一堆细胞,看起来像: =Module.CallToComObject(....) 在模块内部,我有一个函数 Function CallToComObject(...) If o

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

Global obj As Object
我在工作簿_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对象不再初始化,即它被设置为“无”


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

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

  • 使用“结束”
  • 未处理的运行时错误
  • 编辑代码
  • 关闭包含VB项目的工作簿

  • 这不一定是一个详尽的列表,但是…

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

    您有多个函数调用COM对象,还是只有一个?如果只有一个,那么你可以考虑在函数中使它成为静态变量:函数可以检查它的初始化,如果不是,初始化它。全局变量不是邪恶的吗?此外,我认为正确的关键词是
    Public
    ,而不是
    Global
    。在哪里可以找到详尽的列表。我一直想知道是什么阻止了我的全局变量工作。尤其是捕捉应用程序事件的变量。@Tim,我猜是未经处理的运行时错误造成的it@Jon当前位置我只能想到这些。你说的“结束”是什么意思?你能结束一个全局变量吗?我熟悉End with、End Sub、End If等-感谢您提供的信息,非常有价值。我知道2和4,但不知道1和3。@Jon:End by self-“立即终止执行。它本身不需要,但可以放在过程的任何地方,以结束代码执行,关闭用Open语句打开的文件并清除变量。”