Оператор Static

Используется на уровне процедуры для объявления переменных и выделения места в хранилище. Переменные, объявленные с оператором Static, сохраняют свои значения, пока выполняется код.

Синтаксис

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

Синтаксис оператора Static состоит из следующих элементов.

Part Описание
варнаме Обязательно. Имя переменной; соответствует стандартным соглашениям об именовании переменных.
Индексы Необязательный параметр. Размерности переменной массива; можно объявить до 60 размерностей. Аргумент subscriptsиспользует следующий синтаксис:

[ lowerTo ] upper [ , [ lowerTo ] upper ] . .

Если иное не задано явно атрибутом lower, нижняя граница массива задается оператором Option Base. Если оператор Option Base не задан, нижняя граница равна нулю.
New Необязательный параметр. Ключевое слово, позволяющее создать объект неявным образом. Если при объявлении объектной переменной используется ключевое слово New, создается новый экземпляр объекта при первой ссылке на него, так что нет необходимости использовать оператор Set для назначения ссылки на объект. Ключевое слово New нельзя использовать для объявления переменных со встроенными типами данных или экземпляров зависимых объектов.
type Необязательный параметр. Тип данных переменной; Может быть Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (для строк переменной длины), Stringlength (для строк фиксированной длины), 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, строке переменной длины — строка нулевой длины (""), а строка фиксированной длины заполняется нулями. Переменные типа Variant при инициализации получают значение Empty. Каждый элемент переменной определяемого пользователем типа инициализируется как отдельная переменная.

Примечание.

Когда операторы 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 и обратная связь.