Оператор Static

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

Синтаксис

Статическое имя varname [( [ subscripts] ] ] [ Как [Новый ] тип ], [ varname [ ( [ subscripts] ] ] [ Как [ Новый ] тип ].

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

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

[ lowerTo ] верхний [, [ lowerTo ] верхний ] . . .

Если иное не задано явно атрибутом lower, нижняя граница массива задается оператором Option Base. Если оператор Option Base не задан, нижняя граница равна нулю.
New Необязательно. Ключевое слово, позволяющее создать объект неявным образом. Если при объявлении объектной переменной используется ключевое слово New, создается новый экземпляр объекта при первой ссылке на него, так что нет необходимости использовать оператор Set для назначения ссылки на объект. Ключевое слово New нельзя использовать для объявления переменных со встроенными типами данных или экземпляров зависимых объектов.
тип Необязательно. Тип данных переменной; могут быть Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (для строк переменной длины), Длина строки ( для строк фиксированной длины), Object, Variant, определенный пользователем тип или тип объекта. Используйте отдельный пункт Типа для каждой определяемой переменной.

Примечания

После запуска кода модуля переменные, объявленные с помощью статического заявления, сохраняют свое значение до сброса или перезапуска модуля. В модулях классов переменные, объявленные с оператором 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.

Пример

В этом примере используется Статическое заявление, чтобы сохранить значение переменной до тех пор, пока код модуля запущен.

' 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 и обратная связь.