VBA函数和变量
我有一个关于VBA中的变量和函数的问题。我不打算包括项目的确切内容,希望最初的问题不会变得模糊。如果有要求,我可以解释这个项目将被使用。VBA函数和变量
是否可以在VBA中创建通用变量以便所有函数都可以使用它们?
例:
Dim testVariable As String
Dim newVariable As String
testVariable = "A"
Function testFunction() As String
....
newVariable = testVariable
End Function
截至目前,testVariable(当它在功能)是 “空”
谢谢
杰西Smothermon
是任何代码之前,但价值分配必须在过程中发生:
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
离开变量出于任何子/功能,所以它们变成全局变量
然后,调用初始化函数运行包含默认设置,如代码
Sub InitGlobalVars
testVariable = "A"
End Sub
Sub MyProjectMain
InitGlobalVars
....
... rest of code
End Sub
非常简单的例子:
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
正如在其他帖子中提到:全局是一个不好的做法,和值有内部子被分配/功能。它们也应该在模块的开头定义。
是否可以在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
后来叫。实际上,从Bar内部无法引用全局变量testVariable
,因为它声明了一个具有相同名称的局部变量。
带前缀想法的令人敬畏的点....对我来说不会发生,您将无法在稍后更改该变量。谢谢 – 2011-03-07 22:51:13
这指出了另一个不好的做法,即VB语言家族让你绊倒自己 - 本地声明的变量不*必须具有与范围更广的可变变量相对应的唯一名称。范围较窄的变量只是“站在”更广泛的范围之前。 – RolandTumble 2011-03-10 00:43:41
或者,您可以使用全局常量而不是变量。
Public Const TESTVARIABLE = "A"
我相信它更适合您的问题,而不是在特定函数中设置值。
Obs1 .:全局常量(通常)以大写字母存储。
Obs2 .:您不能在工作表代码中设置一个全局常量。使用特定的模块(例如global.bas)来执行此操作。
Rgds
谢谢你的回答,它的工作很完美。事实证明,我确实有许多变量需要用于许多不同的功能以及主要的Sub。我觉得Private可以解决这个问题,所以它只是模块级别。你对我应该使用什么类型的任务有任何建议吗?现在我有十个变量需要是全球性的,而且有很高的潜力,会增加更多的变量。再次感谢 – 2011-03-07 22:41:41
@Jesse Smothermon - 一门课将是一个合理的选择。另外,可以将变量的初始化封装到类本身中。 – Thomas 2011-03-07 22:50:53
正如@Thomas所说。 – mwolfe02 2011-03-08 00:14:13