Na poprzedniej lekcji przyjrzeliśmy się zmiennym, w których można zapisać określone dane, ale nie mogą one zawierać więcej niż jednej wartości. Aby obejść to ograniczenie, w VBA znajdują się tablice, które mogą przechowywać wiele wartości.
Oto kilka przykładów różnych tablic:
Sub variables()
'Przykład deklaracji zmiennej
Dim var1 As String
'Przykład deklaracji tablicy 1-wymiarowej
Dim array1(4) As String
'Przykład deklaracji tablicy dwuwymiarowej
Dim array2(4, 3) As String
'Przykład deklaracji tablicy trójwymiarowej
Dim array3(4, 3, 2) As String
End Sub
Dim array1(4) As String
Tablicę jednowymiarową można traktować jako tabelę składającą się z jednej kolumny. Tablica array1(4) jest jednowymiarową tablicą, która może pomieścić 5 rekordów. Dlaczego 5? Ponieważ liczba rekordów w tablicy zaczyna się od zera (0, 1, 2, 3, 4).
Rozważmy teraz tablicę dwuwymiarową:
Dim array2(4, 3) As String
Będzie już wyglądać jak tabela z 5 wierszami i 4 kolumnami:
'Przypisywanie wartości do kolorowych komórek array2(0, 0) = „Wartość w czerwonej komórce” array2(4, 1) = „Wartość w zielonej komórce” array2(2, 3) = „Wartość w niebieskiej komórce”
Podobnie jak zmienne, stałe mogą być używane do przechowywania wartości, ale różnica polega na tym, że wartości nie można zmieniać. Możemy dodać stałą, aby uniknąć powtarzania wartości, na przykład 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
Ułatwia to zrozumienie i edycję kodu. Pozwala także w prosty sposób zmienić wartość stałej:
Sub const_example()
'Deklaracja stałej + przypisanie wartości
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
Zakres zmiennych
Jeżeli zmienna jest zadeklarowana na początku procedury (Sub), to można jej użyć tylko w tej procedurze. Po wykonaniu procedury wartość zmiennej nie będzie już dostępna.
Sub procedure1() Dim var1 As Integer '=> Zmienna obowiązuje tylko w tej procedurze End Sub Sub procedure2() '=> Nie można tutaj użyć zmiennej var1 End Sub
Aby użyć zmiennej w dowolnej procedurze modułu, wystarczy ją zadeklarować na samym początku modułu. Jeśli zadeklarujesz taką zmienną, będzie ona dostępna do momentu zamknięcia skoroszytu.
Dim var1 As Integer Sub procedure1() '=> Można tutaj użyć zmiennej var1 End Sub Sub procedure2() '=> Można tu również użyć zmiennej var1 End Sub
Jeśli chcesz użyć tej samej zmiennej we wszystkich modułach książki, w poprzednim przykładzie powinieneś jedynie zastąpić Dim przez Global:
Global var1 As Integer
Aby użyć zmiennej po wykonaniu procedury, w której się ona pojawia, zamień Dim na Static:
Sub procedure1()
Static var1 As Integer
End Sub
Aby użyć wartości wszystkich zmiennych w procedurze, dodaj Static przed Sub:
Static Sub procedure1()
Dim var1 As Integer
End Sub
Oto krótki przykład tworzenia własnego typu:
'Tworzenie typu zmiennej
Type customers
last_name As String
first_name As String
End Type
Sub variables()
'Deklaracja zmiennej
Dim cust1 As customers
'Przypisanie wartości do cust1
cust1.last_name = "Smith"
cust1.first_name = "John"
'Przykład użycia
MsgBox cust1.last_name & " " & cust1.first_name
End Sub