Урок 5 по VBA — Объявление локальных и глобальных переменных

Урок 5 по VBA — Объявление локальных и глобальных переменных Макросы на VBA

В данной статье мы рассмотрим работу с локальными и глобальными переменными VBA языка, а именно: как ведут себя переменные, объявленные в блоке модуля и в блоке отдельной процедуры; познакомимся с ключевыми словами Public, Private и Static; Определим логику назначении типов данных при объявлении нескольких переменных в одной строке; напишем парочку примеров.

В прошлых статьях мы кратко рассмотрели переменные и типы данных, теперь настало время более подробно вникнуть во все тонкости…

Объявление нескольких переменных VBA

Рассмотрим такой пример: надо объявить три переменные разного типа, например, Byte, String и Long, это может выглядеть так:

dim A asByte, B asString, C asLong

Но вот что делать, если все три переменные должны быть одного типа, такой код будет неверен:

dim A, B, C asLong

Тут A и В будут типа Variant и только C – Long. Что бы все правильно сработало, нам нужно каждой переменной назначить заданный тип:

dim A asLong, B asLong, C asLong

Объявление переменных в VBA локальной и глобальной видимости

Если переменная VBA объявлена в начале модуля, то она сохраняется в памяти до тех пор, пока работает макрос, если объявление происходит в теле процедуры, то переменная будет удалена из памяти сразу, после выполнения блока кода заданной процедуры. Добавьте в редакторе Visual Basic новую форму и модуль.

Параметры формы: разместите на форме три компонента Label и три кнопки, как показано на рисунке. Имя формы (свойство Name) – VariableForm, имя модуля – VariableModule.

В редакторе кода для модуля пропишите:

Sub VariableModule()    VariableForm.ShowEndSub

Тут мы просто определяем, что при запуске макроса нужно запустить форму.

В редакторе кода для формы пропишите:

'**************************************************' Объявление локальных и глобальных переменных в VBA'************************************************** ' Включаем проверку переменных VBAOptionExplicit ' Глобальная переменнаяDim GVar AsInteger'Нельзя присвоить значение вне процедуры!!!'GVar = 10Sub GetGlobal()    ' Увеличиваем значение на 5    GVar = GVar + 5    Label1.Caption = "Глобальное значение " & GVarEndSubSub GetLocal_1()Dim LVar AsInteger    ' Увеличиваем значение на 2    LVar = LVar + 2    Label2.Caption = "Локальное значение " & LVarEndSubSub GetLocal_2()Dim LVar AsInteger    ' Увеличиваем значение на 3    LVar = LVar + 3    Label3.Caption = "Локальное значение " & LVarEndSub PrivateSub CommandButton1_Click()    Call GetGlobalEndSub PrivateSub CommandButton2_Click()    Call GetLocal_1EndSub PrivateSub CommandButton3_Click()    Call GetLocal_2EndSub PrivateSub UserForm_Click() EndSub PrivateSub UserForm_Initialize()    ' настройка первого текстового поля    Label1.FontSize = 12    Label1.ForeColor = &HFF0000    Call GetGlobal     ' настройка второго текстового поля    Label2.FontSize = 12    Label2.ForeColor = &H6400    Call GetLocal_1     ' настройка третьего текстового поля    Label3.FontSize = 12    Label3.ForeColor = &HFF    Call GetLocal_2EndSub

В самом начале мы объявляем глобальную переменную VBA – GVar типа Integer, в комментарии указано, что вне процедуры присвоить значение переменной нельзя. Далее следуют три процедуры, в первой процедуре происходит увеличение значение глобальной GVar на 5, результат будет записываться в свойство Caption первого компонента Label. Вторя и третья процедуры производят аналогичные действия, только для объявленных в них локальных переменных VBA, LVar, происходит увеличение значения на 2 и на 3, соответственно. События Click (нажатие кнопки мыши) для кнопок будет вызывать заданные процедуры.

При запуске макроса в полях будут отображаться значения 5, 2 и 3. При нажатии на “Кнопка 1” будет происходить вызов процедуры GetGlobal и увеличение значения переменной GVar на 5. Для “Кнопка 2” и “Кнопка 3” будут вызываться процедуры GetLocal_1 и GetLocal_2, однако ничего увеличиваться не будет, так как переменные LVar являются локальными и при каждом вызове заданных процедур их значение будет обнуляться.

Ключевые слова Private, Public и Static

Private – аналогично ключевому слову Dim, использование Private вместо Dim актуально в том случае, если вы хотите, что бы данное ключевое слово напоминало о том, что переменная доступна только в пределах данной процедуры или функции.

Public – позволяет сделать переменную VBA доступной из любой части проекта, однако, это будет актуальным лишь в том случае, если объявление переменных в VBA происходит в разделе Declarations (Объявления) самого модуля. Если же вы пропишите Public вместо Dim в теле процедуры, то видимость все ровно будет доступна только в данной процедуре.

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

Sub GetLocal_1()Static LVar AsInteger    ' Увеличиваем значение на 2    LVar = LVar + 2    Label2.Caption = "Локальное значение " & LVarEndSubSub GetLocal_2()Static LVar AsInteger    ' Увеличиваем значение на 3    LVar = LVar + 3    Label3.Caption = "Локальное значение " & LVarEndSub

Мы просто изменили ключевое слово Dim на Static, и теперь переменные LVar не будут удаляться из памяти после выполнения процедур. Объявление переменных в VBA. Обратите внимание, что мы объявили переменные с одним именем, это можно, так как они находятся в отдельных процедурах.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий