Excel 当其他变量没有';跨模块

Excel 当其他变量没有';跨模块,excel,public,vba,Excel,Public,Vba,我有两个模块:GlobalVariables和DoStuff。在第一个模块中,我定义了几个变量,在第二个模块中用作常量。它看起来像: Option Explicit Public VarA As Integer Public VarB As Integer Public VarC As Integer Public VarD As Integer Sub Initialize() VarA = 30 VarB = 20 VarC = 10 V

我有两个模块:
GlobalVariables
DoStuff
。在第一个模块中,我定义了几个变量,在第二个模块中用作常量。它看起来像:

 Option Explicit
 Public VarA As Integer
 Public VarB As Integer
 Public VarC As Integer
 Public VarD As Integer

 Sub Initialize()
     VarA = 30
     VarB = 20
     VarC = 10
     VarD = MyFunction(0)
End Sub
在第二个模块中,我有以下内容:

Option Explicit
Public Function MyFunction(x As Integer)
     MyFunction = 50  'code that gives an integer here
End Function

Sub DoStuff()
     Debug.Print VarA + VarB + VarC + VarD
End Sub
结果是60,而不是预期的110,因为我可以看到它将VarD视为0。但是,运行此命令后,我可以立即进入即时窗口并键入
Debug.Print VarA+VarB+VarC+VarD
,它将显示110


是什么导致此过程仅在本地重置VarD?

我建议在所有模块中使用,在运行之前编译,如果您可以发布一个更好的
GlobalVariables
模块示例,因为无法在方法之外运行代码,AFAIKI简化了示例以演示问题。编辑代码。选项Explicit始终处于启用状态,
GlobalVariables
只是通过一个子项来初始化所有内容。值得注意的是,我发现通过在第二个模块中调用变量
GlobalVariables.VarD
,可以获得正确的值,但这既麻烦又不方便。你知道我需要做什么来引用没有完整路径名的变量吗?@SandPiper现在真的很早了,所以我可能在胡说八道。在第二个模块中运行
Sub-DoStuff()
之前,您是否始终在第一个模块中运行第一个
Sub-Initialize()
?是的,变量始终是初始化的。除了一个,VarD,所有的都按预期工作。我认为这与VarD是通过在第二个模块中找到的函数获得的这一事实有关,但我似乎不明白为什么会这样,或者如何使用完整的变量地址。如果我运行
初始化
,然后运行
DoStuff
,它将打印110。我建议在所有模块中使用,在运行之前编译,如果您可以发布一个更好的
GlobalVariables
模块示例,因为无法在方法之外运行代码,AFAIKI简化了示例以演示问题。编辑代码。选项Explicit始终处于启用状态,
GlobalVariables
只是通过一个子项来初始化所有内容。值得注意的是,我发现通过在第二个模块中调用变量
GlobalVariables.VarD
,可以获得正确的值,但这既麻烦又不方便。你知道我需要做什么来引用没有完整路径名的变量吗?@SandPiper现在真的很早了,所以我可能在胡说八道。在第二个模块中运行
Sub-DoStuff()
之前,您是否始终在第一个模块中运行第一个
Sub-Initialize()
?是的,变量始终是初始化的。除了一个,VarD,所有的都按预期工作。我认为这与VarD是通过在第二个模块中找到的函数获得的这一事实有关,但我似乎不明白为什么会这样,或者如何使用完整的变量地址。如果我运行
Initialize
,然后运行
DoStuff
,它将打印110。