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