Общие сведения о времени существования переменныхUnderstanding the lifetime of variables

Время, в течение которого переменная сохраняет свое значение, называется временем жизни.The time during which a variable retains its value is known as its lifetime. За время жизни значение переменной может изменяться, но она всегда содержит некоторое значение.The value of a variable may change over its lifetime, but it retains some value. Когда переменная теряет область, она перестает содержать значение.When a variable loses scope, it no longer has a value.

При запуске процедуры выполняется инициализация всех переменных.When a procedure begins running, all variables are initialized. Числовая переменная инициализируется нулем, строка переменной длины инициализируется строкой нулевой длины (""), а строка фиксированной длины заполняется символом, представленным кодом ASCII 0 или Chr(0).A numeric variable is initialized to zero, a variable-length string is initialized to a zero-length string (""), and a fixed-length string is filled with the character represented by the ASCII character code 0, or Chr( 0 ). Переменные типа Variant при инициализации получают значение Empty.Variant variables are initialized to Empty. Каждый элемент переменной пользовательского инициализируется как отдельная переменная.Each element of a user-defined type variable is initialized as if it were a separate variable.

При объявлении переменной объектапространство резервируется в памяти, но его значение устанавливается равным Nothing , пока вы не назначите ссылку на объект с помощью оператора Set .When you declare an object variable, space is reserved in memory, but its value is set to Nothing until you assign an object reference to it by using the Set statement.

Если значение переменной не изменяется во время выполнения кода, она сохраняет назначенное при инициализации значение до потери области.If the value of a variable isn't changed during the running of your code, it retains its initialized value until it loses scope.

Переменная уровня процедуры , объявленная с оператором Dim , сохраняет значение до завершения выполнения процедуры.A procedure-level variable declared with the Dim statement retains a value until the procedure is finished running. Если процедура вызывает другие процедуры, переменная сохраняет свое значение и во время выполнения этих процедур.If the procedure calls other procedures, the variable retains its value while those procedures are running as well.

Если переменная уровня процедуры объявлена с помощью ключевого слова static , переменная сохраняет свое значение до тех пор, пока код выполняется в каком-либо модуле.If a procedure-level variable is declared with the Static keyword, the variable retains its value as long as code is running in any module. После завершения выполнения всего кода, переменная теряет область и значение.When all code has finished running, the variable loses its scope and its value. Ее время жизни аналогично времени жизни переменной уровня модулей.Its lifetime is the same as a module-level variable.

Переменная уровня модулей отличается от статической переменной.A module-level variable differs from a static variable. В стандартном модуле или модуле класса она сохраняет свое значение до остановки выполнения кода.In a standard module or a class module, it retains its value until you stop running your code. В модуле класса она сохраняет значение, пока существует экземпляр этого класса.In a class module, it retains its value as long as an instance of the class exists. Переменные уровня модулей использую ресурсы памяти до сброса их значений, поэтому такие переменные следует использовать только по необходимости.Module-level variables consume memory resources until you reset their values, so use them only when necessary.

Если вы включили ключевое слово static перед оператором Sub или Function , значения всех переменных уровня процедуры в процедуре сохраняются между вызовами.If you include the Static keyword before a Sub or Function statement, the values of all the procedure-level variables in the procedure are preserved between calls.

См. такжеSee also

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.