Применяется на уровне процедуры для описания переменных и выделения памяти. Переменные, описанные с помощью инструкции Static, сохраняют свои значения, пока выполняется программы..
Static имяПеременной[([индексы])] [As [New] тип] [, имяПеременной[([индексы])] [As [New] тип]] . . .
Параметры
имяПеременной
Обязательный. Имя переменной,
удовлетворяющее стандартным правилам именования
переменных.
индексы
Необязательный. Размерности переменной массива;
допускается описание до 60 размерностей. Аргумент индексы использует следующий
синтаксис:
[нижний To] верхний [,[нижний To] верхний] . . .Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base. Если отсутствует инструкция Option Base, нижняя граница массива равняется нулю.
Замечания
После запуска программы в модуле переменные, описанные с помощью
инструкции Static, сохраняют свои значения до сброса или перезапуска
модуля. Инструкция Static применяется в нестатических процедурахs для
явного описания переменных, видимых только в этих процедурах, но имеющих время
жизни, равное времени жизни модуля, в котором эти процедуры
описаны.
Инструкция Static в процедуре предназначена для описания типа
данных переменной, которая сохраняет свое значение в промежутках между вызовами
процедуры. Например, в следующей инструкции описывается массив целых чисел
фиксированного размера:
Static EmployeeNumber(200) As IntegerНиже приводится описание переменной для нового экземпляра листа электронной таблицы:
Static X As New Worksheet
Если ключевое слово New не используется при описании объектной
переменной, то перед использованием объекта необходимо присвоить имеющийся
объект с помощью инструкции Set переменной, ссылающейся на этот объект.
До присвоения объекта описанная объектная переменная имеет специальное значение
Nothing, которое указывает, что переменная не содержит ссылку на
какой-либо определенный экземпляр объекта. При включении ключевого слова
New в описание новый экземпляр объекта создается при первой ссылке на
объект.
Если тип данных или тип объекта не задан, и в модуле отсутствует
инструкция DefТип, по умолчанию переменная получает тип
Variant.
Инструкция Static и ключевое слово Static
похожи, но используются для получения разных результатов. При описании процедуры
с ключевым словом Static (например, Static Sub CountSales ()),
память для всех локальных переменных процедуры выделяется один раз, и значения
этих переменных сохраняются на все время выполнения программы. Для нестатических
процедур память для переменных выделяется при каждом вызове процедуры и
освобождается при завершении процедуры. Инструкция Static применяется для
описания переменных в нестатических процедурах, чтобы сохранить их значения на
время выполнения программы.
При инициализации переменных числовая переменная
получает значение 0, строка переменной длины получает значение пустой строки
(""), а строка фиксированной длины заполняется нулями. Переменные типа
Variant получают при инициализации значение Empty. Каждый элемент
переменной с типом, определяемым пользователем, при инициализации получает
значение, которые он получил бы, если бы являлся одиночной переменной.
При
использовании инструкции Static ее обычно помещают в начало процедуры
вместе с другими инструкциями описания, такими как Dim.
Пример
В данном примере инструкция Static используется для
сохранения значения переменной на все время выполнения модуля.
' Описание функции. Function KeepTotal(Number) ' Только переменная Accumulate сохраняет свое значение ' от вызова к вызову. Static Accumulate Accumulate = Accumulate + Number KeepTotal = Accumulate End Function ' Описание функции Static. Static Function MyFunction(Arg1, Arg2, Arg3) ' Все локальные переменные сохраняют свои значения ' между вызовами функции. Accumulate = Arg1 + Arg2 + Arg3 Half = Accumulate / 2 MyFunction = Half End Function