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。