W VBA, podobnie jak w każdym innym języku programowania, zmienne i stałe służą do przechowywania dowolnych wartości. Jak sama nazwa wskazuje, zmienne mogą się zmieniać, podczas gdy stałe przechowują stałe wartości.
Na przykład stała Pi przechowuje wartość 3,14159265… Liczba „Pi” nie zmieni się podczas wykonywania programu, ale nadal wygodniej jest przechowywać taką wartość jako stałą.
Jednocześnie możemy użyć zmiennej sVAT_Stawka do przechowywania stawki VAT od zakupionych towarów. Wartość zmienna sVAT_Stawka może się różnić w zależności od zakupionego produktu.
Typy danych
Wszystkie zmienne i stałe mają określony typ danych. Poniższa tabela zawiera listę typów danych używanych w VBA wraz z opisem i zakresem możliwych wartości:
Typ danych | Rozmiar | Opis | Zakres wartości |
---|---|---|---|
Bajt | 1 bajtów | Liczby naturalne; często używane do danych binarnych | od 0 do 255 |
Boolean | 2 bajtów | Może być prawda lub fałsz | Prawda czy fałsz |
Liczba całkowita | 2 bajtów | Liczby całkowite (bez części ułamkowej) | od -32 do +768 |
długo | 4 bajtów | Duże liczby całkowite (bez części ułamkowej) | от -2 147 483 648 до +2 147 483 647 |
pojedynczy | 4 bajtów | Liczba zmiennoprzecinkowa o pojedynczej precyzji | od -3.4e38 do +3.4e38 |
Podwójne Geometryczne | 8 bajtów | Liczba zmiennoprzecinkowa podwójnej precyzji | od -1.8e308 do +1.8e308 |
Waluta | 8 bajtów | Liczba zmiennoprzecinkowa ze stałą liczbą miejsc po przecinku | от -922 337 203 685 477.5808 до +922 337 203 685 477.5807 |
Data | 8 bajtów | Data i godzina – Dane typu Data są reprezentowane przez liczbę zmiennoprzecinkową. Część całkowita tej liczby wyraża datę, a część ułamkowa wyraża czas. | od 1 stycznia 100 do 31 grudnia 9999 |
przedmiot | 4 bajtów | Odniesienie do obiektu | Dowolne odniesienie do obiektu |
sznur | Zmienia się | Zestaw znaków. Typ String może mieć stałą lub zmienną długość. Częściej używane ze zmienną długością | Stała długość – do około 65 znaków. Zmienna długość – do około 500 miliardów znaków |
Wariant | Zmienia się | Może zawierać datę, liczbę zmiennoprzecinkową lub ciąg znaków. Ten typ stosuje się w przypadkach, gdy nie wiadomo z góry, jaki rodzaj danych zostanie wprowadzony. | Liczba – Double, string – String |
Oczywiście, korzystając z powyższej tabeli i wybierając odpowiedni typ danych, można oszczędniej korzystać z pamięci (np. wybrać typ danych Liczba całkowita zamiast długo or pojedynczy zamiast Podwójne Geometryczne). Jednak w przypadku korzystania z bardziej kompaktowych typów danych należy uważać, aby kod nie próbował dopasować do nich nieproporcjonalnie dużych wartości.
Deklarowanie zmiennych i stałych
Uwaga tłumacza: Mówiąc o zmiennych w VBA, warto wspomnieć o jeszcze jednym bardzo ważnym punkcie. Jeśli deklarujemy zmienną, ale nie przypisujemy jej żadnej wartości, to jest ona inicjowana wartością domyślną:
• ciągi tekstowe są inicjowane pustymi ciągami;
• liczby — wartość 0;
• wpisz zmienne Boolean - Fałszywy;
• daty – 30 grudnia 1899.
Aby można było użyć zmiennej lub stałej, należy ją zadeklarować. Aby to zrobić, dodaj do makra następujący prosty wiersz kodu:
Dim Имя_Переменной As Тип_Данных
W powyższym wierszu kodu Nazwa zmiennej to nazwa zmiennej, która zostanie użyta w kodzie, oraz Typ danych to jeden z typów danych z tabeli podanej nieco wcześniej w tym artykule. Na przykład:
Dim sVAT_Rate jako pojedynczy Dim i jako liczba całkowita
Podobnie deklarowane są stałe, ale deklarując stałe, należy od razu wskazać ich wartość. Na przykład tak:
Const iMaxCount = 5000 Const iMaxScore = 100
Nie ma konieczności deklarowania zmiennych w Excelu. Domyślnie wszystkie wprowadzone, ale nie zadeklarowane zmienne w Excelu będą miały typ Wariant i będzie w stanie zaakceptować zarówno wartość liczbową, jak i tekstową.
Dzięki temu programista może w każdej chwili wykorzystać nową zmienną (nawet jeśli nie została zadeklarowana), a Excel potraktuje ją jako zmienną typu Wariant. Istnieje jednak kilka powodów, dla których nie należy tego robić:
- Wykorzystanie pamięci i szybkość obliczeniowa. Jeśli nie zadeklarujesz zmiennej ze wskazaniem typu danych, to domyślnie zostanie ona ustawiona na typ Wariant. Ten typ danych zużywa więcej pamięci niż inne typy danych. Kilka dodatkowych bajtów na zmienną może wydawać się niewiele, ale w praktyce programy mogą mieć tysiące zmiennych (zwłaszcza podczas pracy z tablicami). Dlatego dodatkowa pamięć używana przez zmienne, takie jak Wariant, w porównaniu do zmiennych typu Liczba całkowita or pojedynczy, może wzrosnąć do znacznej kwoty. Dodatkowo operacje ze zmiennymi typu Wariant są wykonywane znacznie wolniej niż w przypadku zmiennych innych typów, odpowiednio dodatkowy tysiąc zmiennych typu Wariant może znacznie spowolnić obliczenia.
- Zapobieganie literówkom w nazwach zmiennych. Jeśli wszystkie zmienne są zadeklarowane, można użyć instrukcji VBA − Opcja Jawna (porozmawiamy o tym później) w celu zidentyfikowania wszystkich niezadeklarowanych zmiennych. Eliminuje to pojawienie się błędu w programie w wyniku niepoprawnie zapisanej nazwy zmiennej. Na przykład używając zmiennej o nazwie sVAT_Stawka, można zrobić literówkę i przypisując wartość tej zmiennej napisać: „VATRate = 0,175”. Oczekuje się, że od teraz zmienna sVAT_Stawka powinna zawierać wartość 0,175 – ale oczywiście tak nie jest. Jeśli włączony jest tryb obowiązkowej deklaracji wszystkich używanych zmiennych, kompilator VBA natychmiast wskaże błąd, ponieważ nie znajdzie zmiennej Stawka VAT wśród ogłoszonych.
- Podświetlanie wartości, które nie pasują do zadeklarowanego typu zmiennej. Jeśli zadeklarujesz zmienną określonego typu i spróbujesz przypisać do niej dane innego typu, otrzymasz błąd, którego nienaprawienie może spowodować awarię programu. Na pierwszy rzut oka może się wydawać, że to dobry powód, aby nie deklarować zmiennych, ale w rzeczywistości, niż zanim okaże się, że jedna ze zmiennych otrzymała nieprawidłowe dane, które miała otrzymać – tym lepiej! W przeciwnym razie, jeśli program będzie nadal działał, wyniki mogą być nieprawidłowe i nieoczekiwane, a znalezienie przyczyny błędów będzie znacznie trudniejsze. Możliwe też, że makro zostanie wykonane „pomyślnie”. W rezultacie błąd pozostanie niezauważony, a praca będzie kontynuowana z nieprawidłowymi danymi!
W związku z tym pożądane jest jak najszybsze wykrycie nieprawidłowego typu danych i poprawienie takich błędów w kodzie. Z tych powodów zaleca się deklarowanie wszystkich zmiennych podczas pisania makra VBA.
Opcja Jawna
Operator Opcja Jawna powoduje zadeklarowanie wszystkich zmiennych, które będą używane w kodzie VBA i flaguje wszystkie niezadeklarowane zmienne jako błędy podczas kompilacji (przed rozpoczęciem wykonywania kodu). Zastosowanie tego operatora nie jest trudne – wystarczy napisać tę linię na samej górze pliku VBA:
Option Explicit
Jeśli chcesz zawsze wstawiać Opcja Jawna na górze każdego nowego utworzonego modułu VBA, można to zrobić automatycznie. Aby to zrobić, musisz włączyć opcję Wymagaj deklaracji zmiennej w ustawieniach edytora VBA.
Odbywa się to w ten sposób:
- W menu Edytor Visual Basic kliknij narzędzia > Opcje
- W wyświetlonym oknie dialogowym otwórz kartę redaktor
- Sprawdź pudełko Wymagaj deklaracji zmiennej i naciśnij OK
Po włączeniu ciąg Opcja Jawna zostanie automatycznie wstawiony na początku każdego nowo utworzonego modułu.
Zakres zmiennych i stałych
Każda zadeklarowana zmienna lub stała ma swój ograniczony zakres, czyli ograniczoną część programu, w której ta zmienna istnieje. Zakres zależy od tego, gdzie dokonano deklaracji zmiennej lub stałej. Weźmy na przykład zmienną sVAT_Stawka, który jest używany w funkcji Całkowity koszt. W poniższej tabeli omówiono dwie opcje zmiennego zakresu sVAT_Stawkazadeklarowane na dwóch różnych pozycjach w module:
Opcja Jawne Dim sVAT_Rate jako pojedyncza funkcja Total_Cost() jako Double ... Zakończ funkcję | Jeśli zmienna sVAT_Stawka zadeklarowana na samym początku modułu, wtedy zakresem tej zmiennej będzie cały moduł (czyli zmienna sVAT_Stawka zostaną rozpoznane przez wszystkie procedury w tym module). Dlatego jeśli w funkcji Całkowity koszt zmienna sVAT_Stawka zostanie przypisana jakaś wartość, to następna funkcja wykonywana w tym samym module użyje tej zmiennej sVAT_Stawka w tym samym znaczeniu. Jeśli jednak zostanie wywołana jakaś funkcja znajdująca się w innym module, to dla niej zmienna sVAT_Stawka nie będą znane. |
Opcja Funkcja jawna Total_Cost() As Double Dim sVAT_Rate As Single ... End Function | Jeśli zmienna sVAT_Stawka zadeklarowana na początku funkcji Całkowity koszt, to jego zakres będzie ograniczony tylko do tej funkcji (tj. w ramach funkcji Całkowity koszt, możesz użyć zmiennej sVAT_Stawka, ale nie na zewnątrz). Podczas próby użycia sVAT_Stawka w innej procedurze kompilator VBA zgłosi błąd, ponieważ ta zmienna nie została zadeklarowana poza funkcją Całkowity koszt (pod warunkiem, że używany jest operator Opcja Jawna). |
W powyższym przykładzie zmienna jest zadeklarowana na poziomie modułu za pomocą słowa kluczowego Ściemniać. Jednak może być konieczne, aby zadeklarowane zmienne mogły być używane w innych modułach. W takich przypadkach zadeklarować zmienną zamiast słowa kluczowego Ściemniać słowo kluczowe musi być użyte Publiczne.
Przy okazji, żeby zadeklarować zmienną na poziomie modułu, zamiast słowa kluczowego Ściemniać można użyć słowa kluczowego Sprawy Prywatne, co wskazuje, że ta zmienna jest przeznaczona do użycia tylko w bieżącym module.
Do deklarowania stałych można również używać słów kluczowych. Publiczne и Sprawy Prywatne, ale nie zamiast słowa kluczowego const, razem z tym.
Poniższe przykłady pokazują użycie słów kluczowych Publiczne и Sprawy Prywatne stosowane do zmiennych i stałych.
Opcja Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000 ... | W tym przykładzie słowo kluczowe Publiczne używany do deklarowania zmiennej sVAT_Stawka i stałe iMax_Count. Zadeklarowany w ten sposób zakres elementów będzie stanowić cały bieżący projekt. Oznacza to, że sVAT_Stawka и iMax_Count będą dostępne w dowolnym module projektu. |
Opcja Explicit Private sVAT_Rate As Single Private Const iMax_Count = 5000 ... | W tym przykładzie, aby zadeklarować zmienną sVAT_Stawka i stałe iMax_Count użyte słowo kluczowe Sprawy Prywatne. Zakres tych elementów jest aktualnym modułem. Oznacza to, że sVAT_Stawka и iMax_Count będą dostępne we wszystkich procedurach bieżącego modułu, ale nie będą dostępne dla procedur w innych modułach. |