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

Глобальные переменные — это переменные, объявленные в программе вне подпрограммы в самом начале модуля. В 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 не изменило значения одноименной глобальной переменной.

Предыдущая статья Все статьи Следующая статья