Глобальные и локальные переменные

Глобальные переменные — это переменные, объявленные в программе вне подпрограммы в самом начале модуля. В VBA глобальные переменные видны в любой части модуля, включая подпрограммы (листинг 9.18).

Листинг 9.18. Глобальные переменные

Dim glob1 As Integer, glob2 As Integer

Sub A(glob2)
   Debug.Print "Значение глобальной переменной glob1 ="; glob1
   glob2 = glob2 + 10
   Debug.Print "Значение локальной переменной glob2 ="; glob2
End Sub

Sub Тест()       ' Запускаем эту процедуру
   glob1 = 10
   glob2 = 5
   A 77 ' Вызываем процедуру
   Debug.Print "Значение глобальной переменной glob2 ="; glob2
End Sub

Результат выполнения:

Значение глобальной переменной glob1 = 10
Значение локальной переменной glob2 = 87
Значение глобальной переменной glob2 = 5

Переменной glob2 внутри процедуры A() присваивается значение, переданное при вызове. По этой причине создается новая переменная glob2, которая является локальной. Все изменения этой переменной внутри функции не затронут значение одноименной глобальной переменной.

Локальные переменные — это переменные, объявленные внутри подпрограммы. Если имя локальной переменной совпадает с именем глобальной переменной, то все операции внутри функции осуществляются с локальной переменной, а значение глобальной не изменяется. Локальные переменные видны только внутри тела подпрограммы (листинг 9.19).

Листинг 9.19. Локальные переменные

Option Explicit
Dim glob1 As Integer

Sub A()
   Dim local1 As Integer
   Dim glob1 As Integer
   local1 = 77                     ' Локальная переменная
   glob1 = 25                      ' Локальная переменная
   Debug.Print "Значение glob1 внутри процедуры ="; glob1
End Sub

Sub Тест()       ' Запускаем эту процедуру
   glob1 = 10                      ' Глобальная переменная
   Debug.Print "Значение glob1 до вызова процедуры ="; glob1
   A ' Вызываем процедуру
   Debug.Print "Значение glob1 после вызова  процедуры ="; glob1
   ' Переменная local1 не видна вне процедуры A()
   'Debug.Print local1 ' Инструкция вызовет ошибку
End Sub

Результат выполнения:

Значение glob1 до вызова процедуры = 10 
Значение glob1 внутри процедуры = 25 
Значение glob1 после вызова  процедуры = 10

Как видно из примера, переменная local1, объявленная внутри процедуры A(), недоступна вне процедуры. Объявление внутри процедуры A() локальной переменной glob1 не изменило значения одноименной глобальной переменной.

Visual Basic for Applications (VBA)
Самоучитель по VBA

Помощь сайту

Yandex-деньги: 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

Поиск по сайту в Яндексе