TOP

VBA-Lekcja 6.2. Typy danych (Variables)

YouLibreCalc for Excel logo

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

Tablica jednowymiarowa

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”

Stałe

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

Tworzenie własnego typu zmiennej

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