Zmienne VBA. Poznaj i używaj ich stale.
Jestem pewny, że już używasz zmiennych w Excelu. Nie muszą to być zmienne VBA. Wystarczy, że przynajmniej raz, napisałeś najprostszą formułę. Użyłeś w niej komórki z jakąś wartością. A wartości w komórkach mogą się zmieniać.
A może używasz nazw? Nazwa reprezentuje wartość, zakres albo pojedynczą komórkę. Nazwa pozostaje stała, ale wartości jakie reprezentuje zmieniają się. Widzisz, że to nic skomplikowanego. Zatem do dzieła!
Czym są zmienne VBA i po co ich używać?
Zmienna w VBA to nic innego jak nazwa, która służy do „przechowywania” wartości. Nazwy są przypisywane z wykorzystaniem znaku równości. Na przykład:
mojaZmienna = Range("A1").Value
Dlaczego używamy zmiennych? Po pierwsze, zmienne ułatwiają czytanie kodu VBA. Po drugie ułatwiają utrzymanie bardziej złożonych programów oraz pozwalają na bardziej zaawansowane kodowanie. I w końcu – oszczędzają czas!
Wyobraź sobie sytuację, że w swoim kodzie użyłbyś 10 razy odwołania do komórki B1 w taki sposób:
....Range("B1").Value
Jeżeli po jakimś czasie będziesz zmuszony zmienić to odwołanie, to czeka Cię aktualizacja wszystkich przypadków. Gdybyś użył zmiennej, na przykład tak:
mojaDrugaZmienna = Range("B1").Value
to w opisanej sytuacji – zmienisz tylko tę zmienną.
Na koniec być może najważniejszy powód, aby używać zmiennych VBA. Niektórych zadań w VBA, po prostu nie zrobisz efektywnie bez ich użycia. Mam na myśli na przykład wszelkiego rodzaju pętle. Są to fragmenty kodu gdzie przetwarzasz, jeden po drugim jakieś obiekty (np. komórki w zakresie)
Nadając nazwy swoim zmiennym, pamiętaj o tych zasadach:
- Pierwszy znak nazwy zmiennej musi być literą
- Nie używaj słów zastrzeżonych, takich jak: if, for, with, select etc.
- Używaj podkreślenia i/lub wielkich liter w środku nazwy w celu zwiększenia czytelności
- Nie używaj znaków: #$&!
- Nazwa zmiennej nie może mieć więcej niż 255 znaków
Rodzaje zmiennych VBA
Wiesz już czym są zmienne VBA i dlaczego warto ich używać. Porozmawiajmy zatem o ich rodzajach oraz kiedy ich używać.
Generalnie rzecz biorąc, wskazując typ zmiennej mówisz ile pamięci ma zarezerwować na dane jakie przypiszesz do tej zmiennej. To przyspiesza kod, zmniejsza ryzyko popełnienia błędów i jest dobrą praktyką kodowania. Ale to jest cykl dla początkujących nie-programistów, więc na tym poprzestańmy. Nie będziemy liczyć ile to bajtów i ile milisekund szybciej będzie działał Twój kod 🙂
Najważniejsze typy zmiennych znajdziesz w poniższej tabeli.
TYP ZMIENNEJ | ZAKRES |
Byte | Liczby całkowite w zakresie od 0 do 255 |
Integer | Liczby w zakresie od -32 768 do 32 768 |
Long | Liczby w zakresie od -2 147 483 648 do 2 147 483 648 |
Boolean | Prawda / Fałsz |
Double | Bardzo duże liczby (ujemne do dodatnich) z wysoką precyzją miejsc po przecinku. Używamy również w przypadku %. |
String | Tekst. Może być bardzo długi. |
Object | Wszelkiego rodzaju obiekty, np. wykresy. |
Date | Data w zakresie od 1 stycznia 0001 do 31 grudnia 9999 |
Variant | Dowolna wartość. Może przechowywać również takie wartości jak: „Empty” czy „Null”. Jeśli nie przypiszesz innego typu, to zmienna przyjmie właśnie typ Variant. |
Jak deklarować zmienne VBA?
Aby zadeklarować jakąś zmienną musisz użyć słowa kluczowego Dim. Po słowie Dim wpisujesz wybraną przez siebie nazwę (zgodną z zasadami opisanymi na początku artykułu) Następnie używasz słowa „as” oraz wskazujesz na typ zmiennej.
Pojedynczą zmienną deklarujesz w pojedynczym wierszu, tak:
Dim MojTekst as String
lub kilka zmiennych w ramach jednego wiersza kodu, w taki sposób:
Dim PierwszyWiersz as Long, OstatniWiersz as Long
Jeżeli potrzebujesz użyć w kodzie stałej wartości, która nie będzie się zmieniała użyj słowa kluczowego Const.
Const StawkaVat as Double = 0,23
Deklarując jednocześnie wiele zmiennych tego samego typu, w ramach tej samej nazwy użyjesz tablicy Array, w taki sposób:
Dim Miesiace(1 to 12) as String
O deklarowaniu zmiennych dość łatwo zapomnieć. Ale możesz na samym sobie wymóc taki obowiązek. Wystarczy jeżeli użyjesz Option Explicit, które pojawiając się na początku każdego kodu wymusi definiowanie każdej zmiennej. Zachęcam Cię gorąco do włączenia tej opcji. W edytorze VBA, przejdź do TOOLS > OPTIONS i zaznacz REQUIRE VARIABLE DECLARATION.
Jedną z typów zmiennych jest Object. Dlatego, że zmienne mogą przechowywać różne obiekty Excela. Mogą nimi być na przykład: arkusz, wykres, kształt czy zakres komórek.
Nie wystarczy, że zadeklarujesz zmienną w ten sposób:
Dim MojZakres as Object
Musisz następnie przypisać dany obiekt do tej zmiennej używając słowa Set.
Set MojZakres = Range("A1:C1000")
W przypadku innych typów zmiennych, używasz znaku równości aby przypisać wartość do zmiennej. Co prawda w składni VBA występuje w takich przypadkach słowo Let, ale jego użycie jest opcjonalne. Taki zapis:
OstatniWiersz = Rows.Count
będzie równoznaczny z tym:
Let OstatniWiersz = Rows.Count
Zakres obowiązywania zmiennych
Zmienne VBA możesz wykorzystywać na kilku poziomach. Oznacza to, że zmienna może istnieć w ramach danej: procedury, pojedynczego modułu, czy też wszystkich procedur i modułów. Jeśli wydaje Ci się to skomplikowane, to spójrz na poniższe przykłady.
Option Explicit Sub MojaProcedura() Dim MojaZmienna as String ---jakiś kod--- End Sub
W powyższym przykładzie, zmienna MojaZmienna, będzie działała tylko w ramach procedury MojaProcedura. Oznacza to że zmienna istnieje tak długo, jak długo trwa procedura. Następnie pamięć jest zwalniana. Wartości przechowywanej przez zmienną, nie będziesz w stanie wykorzystywać w innych procedurach.
Option Explicit Dim MojaZmienna as String Sub MojaProcedura() ---jakiś kod--- End Sub
Umieszczając deklarację zmiennej przed procedurą sprawisz, że będzie ona dostępna również dla innych procedur (w ramach danego modułu). Co więcej, po zakończeniu działania danej procedury, wartość przechowywana przez zmienną nie znika z pamięci – możesz jej użyć w innym kodzie.
Option Explicit Public MojaZmienna as String Sub MojaProcedura() ---jakiś kod--- End Sub
Jeśli użyjesz słowa Public, to zdefiniowana zmienna będzie dostępna dla wszystkich modułów i procedur w ramach danego pliku Excel. Taką zmienną możesz zadeklarować w dowolnym module. Oczywiście, nie będzie też znikała z pamięci po zakończeniu działania danego kodu.
Podsumowanie
Wiesz już wszystko co powinieneś wiedzieć (na dobry początek) o zmiennych w VBA. Używaj ich, bo to nie tylko dobra praktyka i ułatwienie w czytaniu kodu. Przede wszystkim, dzięki zmiennym, możesz robić naprawdę ciekawe rzeczy w VBA. Automatyzacja pracy, przetwarzanie wielu plików, arkuszy i wierszy – to wszystko jest możliwe między innymi, dzięki zmiennym.
Nadal masz wątpliwości lub pytania? Zadaj je w komentarzu, lub dołącz do naszej grupy na Facebooku.
Masz problemy z Excelem? Uzyskaj pomoc na grupie Keep Calm And Use Excel.
6 Comments
Michał · 5 lipca 2020 at 21:47
Dlaczego deklarując zmienną 0,23 użyłeś Double a nie np. Integer?
Łukasz Pietrzak · 6 lipca 2020 at 15:41
Ponieważ INTEGER to liczby całkowite, a DOUBLE zmiennoprzecinkowe.
Tomek · 11 maja 2023 at 08:12
brakuje typów zmiennych Single, Double, Currency i Decimal
Łukasz Pietrzak · 11 maja 2023 at 18:45
Tomek, dlatego napisałem „Najważniejsze typy zmiennych znajdziesz w poniższej tabeli.” 🙂
Krzysiek · 19 lutego 2024 at 19:15
Czy jest limit pamięci na zmienne w VBA…?
Łukasz Pietrzak · 20 lutego 2024 at 07:28
Z tego co wiem, łącznie na kod, zmienne, tablice w 64-bitowych wersjach Excela (2010-2016) mamy 4GB. Natomiast różne typy zmiennych zajmują różny obszar pamięci. Np. zmienna typu Integer zajmuje 2 byte, a Long 4 byte, a Double 8.