我对VBA中的变量和函数有疑问。我不会准确包含项目的内容,希望最初的问题不会模糊不清。我可以解释一下如果要求将用于该项目。
是否可以在VBA中创建通用变量,以便所有函数都可以使用它们?
例如:
Dim testVariable As String
Dim newVariable As String
testVariable = "A"
Function testFunction() As String
....
newVariable = testVariable
End Function
截至目前,testVariable(当它在函数中时)是“Empty”
谢谢,
Jesse Smothermon
答案 0 :(得分:4)
是的,但价值分配必须在程序中进行:
Public testVariable As String
Public newVariable As String
Sub SetTestVariable()
testVariable = "A"
End Sub
Function testFunction() As String
....
newVariable = testVariable
End Function
请记住,使用大量全局变量通常是不好的编程习惯。您希望将变量的范围限制为使用它们的位置。有关VBA中作用域的详细信息,请参阅此Microsoft知识库文章:Scope of variables in Visual Basic for Applications
答案 1 :(得分:2)
将变量保留在任何子/函数之外,因此它们变为Globals
然后,在运行包含默认设置的任何代码(例如代码
)之前调用init函数Sub InitGlobalVars
testVariable = "A"
End Sub
Sub MyProjectMain
InitGlobalVars
....
... rest of code
End Sub
答案 2 :(得分:2)
是否可以在VBA中创建通用变量,以便所有函数都可以使用它们?
是的,虽然您需要声明mwolf02所述的范围。 然而,你在VBA中做不到的就是在函数或过程调用之外填充它们,就像使用VBScript一样。
此外,如果您确实需要全局变量,则应该派生一个命名方案,将全局变量与本地声明的变量区分开来(例如,用g_
作为前缀)。你可以得到这个令人困惑的场景:
Public testVariable as String
Public Sub Main()
Call Foo()
Call Bar()
End Sub
Public Sub Foo()
testVariable = "Foo"
End Sub
Public Sub Bar()
Dim testVariable As String
testVariable = "Bar"
End Sub
即使testVariable
稍后被调用,Bar
的值也将是“Foo”。实际上,没有办法从Bar中引用全局变量testVariable
,因为它声明了一个具有相同名称的局部变量。
答案 3 :(得分:1)
或者,您可以使用全局常量而不是变量。
Public Const TESTVARIABLE = "A"
我认为它更适合您的问题,而不是在特定功能中设置值。
Obs1。:全局常量(通常)以大写字母存储。
Obs2。:您无法在工作表代码中设置全局常量。使用特定模块(例如global.bas)来执行此操作。
RGDS
答案 4 :(得分:0)
非常简短的例子:
Dim testVariable As String
Dim newVariable As String
Sub setVariable(ByVal x as string)
testVariable = x
End Sub
Function testFunction() As String
testFunction = testVariable
End Function
Sub test()
Call setVariable("A")
MsgBox testFunction()
Call setVariable("B")
MsgBox testFunction()
End Sub
正如其他帖子中所提到的:全局变量是一种不好的做法,并且必须在子/函数内分配值。它们也应该在模块的开头定义。