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 可选。 变量的数据类型;可以是当前不支持的字节布尔值、整数货币精度、双精度小数 () 、日期字符串 ((对于可变长度字符串) ),对于固定长度字符串) 、ObjectVariant用户定义类型对象类型,可以是字符串长度 (。 对要定义的每个变量使用单独的 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 支持和反馈,获取有关如何接收支持和提供反馈的指南。