Поделиться через


Общие сведения о времени существования переменных

Время, в течение которого переменная сохраняет свое значение, называется временем жизни. За время жизни значение переменной может изменяться, но она всегда содержит некоторое значение. Когда переменная теряет область, она перестает содержать значение.

При запуске процедуры выполняется инициализация всех переменных. Числовая переменная инициализируется до нуля, строка переменной длины инициализируется в строку нулевой длины (""), а строка фиксированной длины заполняется символом, представленным кодом символа ASCII 0 или Chr( 0 ). Переменные типа Variant при инициализации получают значение Empty. Каждый элемент переменной пользовательского инициализируется как отдельная переменная.

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

Если значение переменной не изменяется во время выполнения кода, она сохраняет назначенное при инициализации значение до потери области.

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

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

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

Если добавить ключевое слово Static перед инструкцией Sub или Function , значения всех переменных уровня процедуры в процедуре сохраняются между вызовами.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.