尽管这个问题已经由@Gary's Student在四年前回答过了,但是有一个微妙的细节值得一提,因为解决方案可能取决于
myvar
的数据类型。
首先,正如你在问题中所指出的那样,Public Static myvar as Integer
是不起作用的,因为Static
只允许在子程序或函数内部使用。
如@Patrick Lepelletier在OP的评论中所述,您可以通过声明一个Constant
来轻松解决此问题(假设您不需要动态更改它):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
在这个简单的示例中,
myvar
是一个整数,伪常量方法显然是不必要的,并增加了函数调用的开销。只需声明一个
Constant
即可完成任务。但是,仅当值是静态的且
不是对象时,才能使用常量。如果
myvar
是一个对象,例如
Range
,则无法使用常量。在这种情况下,使用伪常量可能会很有用:
Private Function myvar() as Range
Set myvar = Range("A1")
End Function
另一个优点是,您可以在函数内部使用代码来检查特定条件并相应地为
myvar
分配不同的值。
伪常量方法也可以与命名工作表范围相结合:如果单元格A1是一个命名范围,比如MyRange
,那么您可以写:
Dim strMyString as String
strMyString = "MyRange"
Private Function myvar() as Range
Set myvar = Range(strMyString)
End Function
现在可以在不破坏代码的情况下移动单元格A1的内容,因为如果您剪切和粘贴单元格,则命名范围会跟随移动。我发现这种方法在设计阶段很有用,因为工作表中的事物往往会频繁移动。
伪常量还有助于避免通常与全局变量(或模块级变量)相关的某些问题,这可能是大型项目中的一个问题。
Public Const myvar as integer = 999
- Patrick Lepelletier