Minuty czytania: 4

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!

Kobiety programujące na laptopie. Zmienne VBA.

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 ZMIENNEJZAKRES
ByteLiczby całkowite w zakresie od 0 do 255
IntegerLiczby w zakresie od -32 768 do 32 768
LongLiczby w zakresie od -2 147 483 648  do 2 147 483 648
BooleanPrawda / Fałsz
DoubleBardzo duże liczby (ujemne do dodatnich) z wysoką precyzją
miejsc po przecinku. Używamy również w przypadku %.
StringTekst. Może być bardzo długi.
ObjectWszelkiego rodzaju obiekty, np. wykresy.
DateData w zakresie od 1 stycznia 0001 do 31 grudnia 9999
VariantDowolna 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.

Włączanie opcji Option Explicit.

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.

Zakres obowiązywania zmiennych VBA. Moduły i procedury.

.

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.

Categories: VBA

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.

Dodaj komentarz

Avatar placeholder

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *