Zeu*_*eus 10 excel vba shared public global-variables
是否可以在一个过程中声明一个静态变量,并使用Excel VBA在几个不同的过程中使用此变量?
即
Public myvar as integer
Sub SetVar()
static myvar as integer
myvar=999
end sub
sub Usevar()
dim newvar as integer
newvar=myvar*0.5
end sub
Run Code Online (Sandbox Code Playgroud)
我需要通过其他程序看到myvar,而不是改变或"迷失".如果myvar未被声明为静态变量,则上面的代码可以工作,但是更多代码然后变量"丢失".如果使用静态声明,则usevar过程不会看到myvar.并且VBA不接受"Public Static myvar as integer".
谢谢你的帮助
宙斯
通过调用MAIN来试试这个:
Public myvar As Integer
Sub MAIN()
Call SetVar
Call UseVar
End Sub
Sub SetVar()
myvar = 999
End Sub
Sub UseVar()
Dim newvar As Variant
newvar = myvar * 0.5
MsgBox newvar
End Sub
Run Code Online (Sandbox Code Playgroud)
如果声明一个静态项,则其值将保留在过程或子过程中.如果声明项目为Public,则其值将被保留,并且其他过程也将显示该值.
尽管@Gary 的学生在四年前回答了这个问题,但有一个微妙的细微差别值得一提,因为解决方案可能取决于 myvar.
首先,正如您在问题中所指出的,Public Static myvar as Integer不起作用,因为Static仅允许在子或函数内部使用。
正如@Patrick Lepelletier 对 OP 的评论中所述,您可以通过声明 aConstant来轻松解决此问题(假设您不需要动态更改它):Public Const myvar as Integer = 999。(或可能Private Const myvar...)
另一种选择是声明myvar为函数而不是变量或常量,有效地将其转换为伪常量:
Private Function myvar() as Integer
Static intMyvar as Integer
intMyvar = 999
myvar = intMyvar
End function
Run Code Online (Sandbox Code Playgroud)
在这个简单的例子中,其中myvar是一个整数,伪常量方法显然是不必要的,并且增加了函数调用的开销。只需声明 a 即可Constant完成工作。但是,仅当值是 static 而不是 object 时,才使用常量。如果myvar是对象,例如 a ,它将不起作用Range。在这种情况下,使用伪常量可能很有用:
Private Function myvar() as Range
Set myvar = Range("A1")
End Function
Run Code Online (Sandbox Code Playgroud)
另一个优点是您可以使用函数内部的代码来检查某些条件并相应地分配不同的值myvar。
伪常量方法也可以与命名工作表范围结合使用:如果单元格 A1 是命名范围,例如MyRange,那么您可以编写:
Dim strMyString as String
strMyString = "MyRange"
Private Function myvar() as Range
Set myvar = Range(strMyString)
End Function
Run Code Online (Sandbox Code Playgroud)
现在可以在不破坏代码的情况下移动单元格 A1 的内容,因为如果您剪切和粘贴单元格,命名范围将随之而来。我发现这种方法在设计阶段很有用,因为工作表中的东西往往会移动很多。
伪常量还有助于避免一些通常与全局(或模块级)变量相关的问题,这些问题在大型项目中可能是一个问题。
| 归档时间: |
|
| 查看次数: |
48489 次 |
| 最近记录: |