На предыдущем уроке мы рассматривали переменные, в которые можно записывать определенные данные, однако они не могут содержать более одного значения. Чтобы обойти это ограничение, в VBA существуют массивы, в которые можно записывать множество значений.
Приведем несколько примеров различных массивов:
Sub variables() 'Пример декларирования переменной Dim var1 As String 'Пример декларирования 1-но мерного массива Dim array1(4) As String 'Пример декларирования 2-х мерного массива Dim array2(4, 3) As String 'Пример декларирования 3-х мерного массива Dim array3(4, 3, 2) As String End Sub
Dim array1(4) As String
Одномерный массив можно представить как таблицу, которая состоит из одного столбца. Массив array1 (4) является одномерным, в который можно поместить 5 записей. Почему 5? Потому, что номера записей в массиве начинаются с нуля (0, 1, 2, 3, 4).
Теперь давайте рассмотрим 2-х мерный массив:
Dim array2(4, 3) As String
Это уже будет выглядеть, как таблица с 5 строками и 4 столбцами:
'Присвоение значений для закрашенных ячеек array2(0, 0) = "Значение в красной ячейке" array2(4, 1) = "Значение в зеленой ячейке" array2(2, 3) = "Значение в синей ячейке"
Как и переменные, константы могут использоваться для сохранения значений, однако отличие в том, что значения не могут изменяться. Мы можем добавить константу, чтобы избежать повторения значение, например,13.14:
Sub const_example() Cells(1, 1) = Cells(1, 2) * 13.14 Cells(2, 1) = Cells(2, 2) * 13.14 Cells(3, 1) = Cells(3, 2) * 13.14 Cells(4, 1) = Cells(4, 2) * 13.14 Cells(5, 1) = Cells(5, 2) * 13.14 End Sub
Это делает код легче для восприятия и редактирования. Также позволяет достаточно просто изменить само значение константы:
Sub const_example() 'Декларирование константы + присвоение значения Const ANNUAL_RATE As Double = 13.14 Cells(1, 1) = Cells(1, 2) * ANNUAL_RATE Cells(2, 1) = Cells(2, 2) * ANNUAL_RATE Cells(3, 1) = Cells(3, 2) * ANNUAL_RATE Cells(4, 1) = Cells(4, 2) * ANNUAL_RATE Cells(5, 1) = Cells(5, 2) * ANNUAL_RATE End Sub
Область видимости переменных
Если переменная декларируется в начале процедуры (Sub), то она может быть использована только в данной процедуре. Значение переменной не будет больше доступно после выполнения процедуры.
Sub procedure1() Dim var1 As Integer ' => Переменная действительна только в этой процедуре End Sub Sub procedure2() ' => var1 не может быть использована здесь End Sub
Для того, чтобы использовать переменную в любой процедуре модуля, нам нужно лишь задекларировать ее в начале модуля. И если вы задекларируете переменную таким образом, она будет доступна вплоть до закрытия робочей книги.
Dim var1 As Integer Sub procedure1() ' => var1 может быть использована здесь End Sub Sub procedure2() ' => var1 может быть также использована и здесь End Sub
Если вы захотите использовать одну и ту же переменную во всех модулях книги, стоит только в предыдущем примере заменить Dim на Global:
Global var1 As Integer
Чтобы использовать переменную после выполнения процедуры, в которой она появилась, замените Dim на Static:
Sub procedure1() Static var1 As Integer End Sub
Чтобы использовать значения всех переменных в процедуре, добавьте Static перед Sub:
Static Sub procedure1() Dim var1 As Integer End Sub
Вот краткий пример, как можно создать свой собственный тип:
'Создание типа переменной Type customers last_name As String first_name As String End Type Sub variables() 'Объявление переменной Dim cust1 As customers 'Присвоение значения для cust1 cust1.last_name = "Smith" cust1.first_name = "John" 'Пример использования MsgBox cust1.last_name & " " & cust1.first_name End Sub