Start > Kursy on-line > Excel - makra i VBA

Excel - makra i VBA


Deklaracja zmiennych - najważniejsze typy

Ostatnia część związana z deklarowaniem obiektów dotyczyć będzie zmiennych. Zmienne można określić jako ten element języka, w którym przechowywane są informacje (dane). W zależności od sposobu deklaracji oraz typu zmiennej dane mogą przyjmować różny format oraz być dostępne z różnego miejsca.

Deklaracja zmiennej wygląda następująco:


Sub test()

Dim licznik As Integer

End Sub
Od deklaracji, którą widzieliśmy wcześniej (przy opisie procedur) różni się tylko tym, że doszło słowo Dim na początku. Trzeba jednak wspomnieć, iż deklarowanie zmiennych nie jest obligatoryjne - można używać wyrażeń, przypisując im wartości, dane - odczytując je później, natomiast nie trzeba wcześniej koniecznie ich deklarować. Jednak, aby nasza aplikacja była szybsza i bardziej wydajna warto posługiwać się deklaracjami zmiennych, dzięki czemu możemy dopasować typ określonego obiektu i zarezerwować w komputerze mniej pamięci. Aby dopasować typ zmiennej do charakteru danych jakie zamierzamy w niej przechowywać, powinniśmy poznać kilka najważniejszych spośród nich:

  • Byte - najprostszy (i zajmujący najmniej miejsca w pamięci komputera) typ danych, który pozwala przechowywać liczby całkowite z przedziału od 0 do 255 - świetnie się nadaje do wykorzystania jako wszelkiego rodzaju licznik w pętlach, których liczba powtórzeń nie przekracza wspomnianej przez chwilą wartości.
  • Integer - przechowuje również liczby całkowite, ale z przedziału -32 768 do 32 767.
  • Long - typ przechowujący największe liczby całkowite: od -2 147 483 648 do 2 147 483 647.
  • Date - typ do przechowywania danych w formacie daty i czasu. Ważne jest, iż data musi być podawana pomiędzy znakami "#" i jeśli jest podana opisowo, to musi być to język angielski - czyli 1 stycznia 2010 r. - #1 January 2010#. Zakres dat jaki jest obsługiwany to od 1 stycznia 100 do 31 grudnia 9999.
  • String - typ zmiennej przechowujący łańcuch znaków (czyli tekst). Opcjonalnie podana gwiazdka z liczbą za słowem "String" pozwoli na ograniczenie długości łańcucha znaków (czyli jak napiszemy "As String * 10" - to zmienna będzie przechowywać maksymalnie 10 znaków). UWAGA: próba zapisania dłuższego tekstu do zmiennej ze stałą długością nie skończy się ostrzeżeniem - program zapisze po prostu "obcięty" łańcuch nie informując nas o tym.
  • Variant - ostatni z najważniejszych typów danych - jest najbardziej ogólny, w zmiennej tego typu możemy zapisać niemal wszystko. Warto wspomnieć, iż jeśli używamy zmiennych bez ich wcześniejszego deklarowania, to przyjmują one taki właśnie typ.

    Drugim elementem, który wymaga krótkiego komentarza jest miejsce deklaracji zmiennych oraz to co z tego wynika. Najczęściej deklaracja zmiennych ma miejsce wewnątrz określonej procedury lub funkcji. Takie zmienne są deklarowane na samym początku, przed napisaniem pierwszej instrukcji - aby uniknąć sytuacji, że do zmiennej przypisujemy np. najpierw wartość, a potem dopiero ją deklarujemy - w takiej sytuacji program zwróci błąd i powie, że zmienna o takiej, a takiej nazwie już istnieje i jest wykorzystywana. Aby tego uniknąć, na samej górze modułu, w którym umieszczamy procedury, możemy użyć polecenia:
    
    Option Explicit
    
    Sub test() End Sub
    Option Explicit spowoduje, że program nie pozwoli na użycie zmiennych, które nie zostały wcześniej zdefiniowane. Dodatkową korzyścią jest unikanie literówek w używanych zmiennych - jeśli się pomylimy, przy próbie uruchomienia zostaniemy poinformowani o błędzie stosownym komunikatem:



    Warto pamiętać, iż zmienne zdefiniowane w ramach danej procedury są dostępne dopóty, dopóki program nie wyjdzie z tej procedury - po jej zakończeniu pamięć zostaje zwolniona.
    Jeśli zaszła by potrzeba zdefiniowania zmiennej o szerszym zasięgu, należy uczynić to poza modułem na jego górze (np. po poleceniu "Option Explicit"):

    
    Option Explicit
    Dim licznik As Byte
    
    Sub test() End Sub
    taka zmienna (nazywana "globalną") będzie przechowywała wartość podczas całego czasu korzystania ze stworzonej aplikacji, można z niej też korzystać w każdym module i innym obiekcie danego projektu. Tego typu zmiennych nie można tworzyć w module klas.
    Jeśli z jakiegokolwiek powodu chcielibyśmy utworzyć "stałą" - czyli obiekt przechowujący określoną informację, musimy użyć zamiast sformułowania Dim polecenia Const i przypisać do niego określoną wartość:

    
    Option Explicit
    Dim licznik As Byte
    Public Const licznik2 as Byte = 123
    
    Sub test() End Sub
    Nasz przykład dotyczy stałej globalnej, natomiast równie dobrze można deklarować stałe wewnątrz procedur z konsekwencjami podobnymi do tych, które dotyczą zmiennych (bez użycia "Public").