VBA函数和变量

时间:2011-03-07 22:23:36

标签: excel function vba variables

我对VBA中的变量和函数有疑问。我不会准确包含项目的内容,希望最初的问题不会模糊不清。我可以解释一下如果要求将用于该项目。

是否可以在VBA中创建通用变量,以便所有函数都可以使用它们?

例如:

Dim testVariable As String
Dim newVariable As String

testVariable = "A"

Function testFunction() As String
    ....
    newVariable = testVariable
End Function

截至目前,testVariable(当它在函数中时)是“Empty”

谢谢,

Jesse Smothermon

5 个答案:

答案 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

正如其他帖子中所提到的:全局变量是一种不好的做法,并且必须在子/函数内分配值。它们也应该在模块的开头定义。