На попередньому уроці ми розглядали змінні, в які можна записувати певні дані, проте вони не можуть містити більше одного значення. Щоби обійти це обмеження, в 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