Static 语句
在 过程级别 用于声明 变量 和分配存储空间。 在 Static 语句内声明的变量会在代码运行时一直保留其值。
语法
静态varname [ ( [ 下标 ] ) ] [ As [ New ] type ], [ varname [ ( [ 下标 ] ) ] [ As [ New ] type ]] 。
Static 语句的语法包含以下部分:
Part | 说明 |
---|---|
varname | 必填。 变量的名称;紧跟命名约定的标准变量。 |
下标 | 可选。 数组变量的维度;最多可以声明 60 个维度。 下标参数使用以下语法: [ lowerTo ] upper [ , [ lowerTo ] upper ] . . 如果未在 lower 中显式声明,则数组的下限由 Option Base 语句控制。 如果没有 Option Base 语句,则下限为零。 |
New | 可选。 允许隐式创建对象的关键字。 如果在声明对象变量时使用 New,将会在首次引用该对象时创建一个新的对象实例,因此不必使用 Set 语句分配对象引用。 New 关键字不能用于声明任何固有数据类型的变量,并且不能用于声明相关对象的实例。 |
type | 可选。 变量的数据类型;可以是当前不支持的字节、布尔值、整数、长、货币、单精度、双精度、小数 () 、日期、字符串 ((对于可变长度字符串) ),对于固定长度字符串) 、Object、Variant、用户定义类型或对象类型,可以是字符串长度 (。 对要定义的每个变量使用单独的 As类型 子句。 |
备注
运行模块代码后,使用 Static 语句声明的变量会保留其值,直到重置或重启模块。 在类模块中,使用 Static 语句声明的变量会在每个类实例中保留其值,直到实例被销毁。 在窗体模块中,静态变量会在窗体关闭前一直保留其值。
在非静态过程中使用 Static 语句可显式声明只在该过程内可见的变量,但这些变量的生存期与在其中定义过程的模块相同。
在过程内使用 Static 语句声明在过程调用之间保留其值的变量的数据类型。 例如,以下语句声明一个固定大小的整数数组:
Static EmployeeNumber(200) As Integer
以下语句为新的工作表实例声明一个变量:
Static X As New Worksheet
如果在声明对象变量时未使用 New 关键字,则必须使用 Set 语句为引用对象的变量分配现有对象,然后才能使用它。 在为其分配对象之前,声明的对象变量具有特殊值 Nothing,指示它不引用对象的任何特定实例。 在声明中使用 New 关键字时,将会在首次引用该对象时创建一个对象实例。
如果不指定数据类型或对象类型,并且模块中不存在 Deftype 语句,则默认情况下变量是 Variant 类型。
注意
[!注释] Static 语句和 Static 关键字类似,但用于不同的效果。 如果使用 static 关键字 ((如) 中所示 Static Sub CountSales ()
)声明过程,则过程中所有局部变量的存储空间将分配一次,并且变量的值将保留整个程序运行的时间。 对于非静态过程,变量的存储空间在每次调用过程时分配,并在退出过程时释放。 Static 语句用于声明非静态过程内的特定变量,以便在程序运行时一直保留其值。
在初始化变量时,数值变量将初始化为 0,可变长度字符串将初始化为零长度字符串 (""),固定长度字符串将使用零填充。 将“变量”变量初始化为空。 用户定义类型的变量的每个元素将会像它们是单独的变量那样初始化。
注意
如果在过程内使用 Static 语句,请将它们与其他声明性语句(如 Dim)一起放在过程的开头。
示例
此示例使用 Static 语句在模块代码运行时保留变量的值。
' Function definition.
Function KeepTotal(Number)
' Only the variable Accumulate preserves its value between calls.
Static Accumulate
Accumulate = Accumulate + Number
KeepTotal = Accumulate
End Function
' Static function definition.
Static Function MyFunction(Arg1, Arg2, Arg3)
' All local variables preserve value between function calls.
Accumulate = Arg1 + Arg2 + Arg3
Half = Accumulate / 2
MyFunction = Half
End Function
另请参阅
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈