Static Statement

Description

Used at procedure level to declare variables and allocate storage space. Variables declared with the Static statement retain their value as long as the code is running.

Syntax

Static varname[([subscripts])][As [New] type][, varname[([subscripts])][As[New] type]] . . .

The Static statement syntax has these parts:

Part

Description

varname

Name of the variable; follows standard variable naming conventions.

subscripts

Dimensions of an array variable; up to 60 multiple dimensions may be declared. The subscripts argument uses the following syntax:

[lower To] upper [,[lower To] upper] . . .

When not explicitly stated in lower, the lower bound of an array is controlled by the Option Base statement. The lower bound is zero if no Option Base statement is present.

New

Keyword used to indicate that a declared object variable is a new instance of a Visual Basic object or an externally creatable OLE Automation object. The New keyword can’t be used to create variables of any intrinsic data type and can’t be used to create dependent OLE Automation objects.

type

Data type of the variable; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String (for variable-length strings), String * length (for fixed-length strings), Object, Variant, a user-defined type, or an object type. Use a separate As type clause for each variable being defined.


Remarks

Once module code is running, variables declared with the Static statement retain their value until the module is reset or restarted. Use the Static statement in nonstatic procedures to explicitly declare Static variables.

Use a Static statement within a procedure to declare the data type of a Static variable. For example, the following statement declares a fixed-size array of integers:


Static EmployeeNumber(200) As Integer

Also use the Static statement to declare the object type of a variable. The following declares a variable for a new instance of a worksheet:


Static X As New Worksheet

If the New keyword is not used when declaring an object variable, no instance of the object actually exists. A variable that refers to an object must be assigned an existing object using the Set statement before it can be used. Until it is assigned an object, the declared object variable has the special value Nothing, which indicates that it does not refer to any particular instance of an object.

If you do not specify a data type or object type, and there is no Deftype statement in the module, the variable is Variant by default.

Note The Static statement and the Static keyword affect the lifetime of variables differently. If you declare a procedure using the Static keyword (as in Static Sub CountSales ()), the storage space for all local variables within the procedure is allocated once and the value of the variables is preserved for the entire time the program is running. For nonstatic procedures, storage space for variables is allocated each time the procedure is called and released when the procedure is exited. The Static statement is used to declare variables within nonstatic procedures to preserve their value for as long as the program is running.

When variables are initialized, a numeric variable is initialized to 0, a variable-length string is initialized to a zero-length string, and a fixed-length string is filled with zeros. Variant variables are initialized to Empty. Each element of a user-defined type variable is initialized as if it were a separate variable.

Tip When you use the Static statement in a procedure, it is a generally accepted programming practice to put the Static statement at the beginning of the procedure with any Dim statements.

See Also

Array Function, Dim Statement, Function Statement, Option Base Statement, Private Statement, Public Statement, ReDim Statement, Sub Statement.

Example

This example uses the Static statement to retain the value of a variable for as long as module code is running.


' Function definition.KeepTotal(Number)
    ' Only the variable Accumulate preserves its value between calls.
    Static Accumulate
    Accumulate = Accumulate + Number
    KeepTotal = AccumulateFunction
' Static function definition.Function MyFunction(Arg1, Arg2, Arg3)
    ' All local variables preserve value between function calls.
    Accumulate = Arg1 + Arg2 + Arg3
    Half = Accumulate / 2
    MyFunction = HalfFunction