Strona główna kursu

VBA w Excelu - kurs dla początkujących

Zmienne

Pisząc kod programu rzadko posługujemy się konkretnymi wartościami liczbowymi lub tekstowymi. Częściej posługujemy się pewnymi symbolami (nazwami), którym podczas działania programu możemy przypisywać odpowiednie wartości. Symbole te nazywamy zmiennymi. Dzięki zmiennym możemy pisać programy, których sposób działania zależy od aktualnych informacji. Kiedy zmienia się wartość zmiennej, zmienia się sposób działania programu. A więc aby w pełni wykorzystać możliwości języka VBA należy stosować zmienne.

  • zmienna - opatrzone nazwą miejsce w pamięci do przechowywania danych, które mogą ulegać modyfikacjom w trakcie wykonywania programu. Każda zmienna zaopatrzona jest w unikatową nazwę, która identyfikuje ją w obrębie danego zakresu. Typ danych może być określony lub nie. Nazwy zmiennych muszą zaczynać się literą, muszą być unikatowe w obrębie swego zakresu, nie mogą być dłuższe niż 255 znaków i nie mogą zawierać kropki ani znaku deklarującego typ.

Deklarowanie zmiennych:

Deklarowanie zmiennej jest to operacja polegająca na nadaniu jej nazwy oraz określeniu typu i dostępności. Jeżeli zadeklarujemy zmienną to jednocześnie przydzielamy jej pamięć. Zmienną możemy zadeklarować wewnątrz konkretnej procedury lub w sekcji deklaracji modułu kodu. Miejsce deklaracji ma wpływ na dostępność danej zmiennej.

Do deklarowania zmiennej zazwyczaj stosowane jest słowo kluczowe Dim. Instrukcja deklaracji w której użyliśmy słowa kluczowego Dim może być umieszczona wewnątrz procedury, wówczas zostanie utworzona zmienna na poziomie procedury. Jeżeli natomiast deklaracja zostanie umieszczona na początku modułu w sekcji deklaracji, utworzona będzie zmienna na poziomie modułu. Poniżej przedstawiam przykład deklaracji w którym deklarujemy zmienną o nazwie MojaLiczba.

Dim MojaLiczba

Oprócz deklarowania zmiennych za pomocą słowa kluczowego Dim, w deklarowaniu zmiennych możemy użyć słów kluczowych Private, Public, oraz Static. Słowa te służą nie tylko do deklarowania zmiennych ale i do określania ich zakresu. Temat ten rozwinę w dalszej części strony.


Typy danych:

Deklarując zmienne możemy określić jakiego typu dane zmienna będzie przechowywać. Jak już wspomniałem deklaracja zmiennej to jednocześnie rezerwacja w pamięci komputera miejsca potrzebnego do przechowania wartości, która zostanie przypisana do zmiennej. Jeżeli podczas deklarowania zmiennej podasz jej typ określasz tym samym bardziej precyzyjnie ile miejsca VBA ma zarezerwować dla tej zmiennej. W poniższym przykładzie deklarujemy zmienną typu Integer która zajmuje 2 bajty pamięci. Dla porównania podam, że ta sama zmienna zadeklarowana bez podania typu danych, będzie zajmować najmniej 16 bajtów.

Dim MojaLiczba As Integer

Zagadnienia określania typów danych podczas ich deklaracji nie warto jednak wyolbrzymiać. Przy obecnym stanie technicznym sprzętu i przy wielkości programów jakie będziemy tworzyć w tym kursie, temat określania typu danych nie ma aż tak dużego znaczenia. Przypuszczam też, że dla osób początkujących wygodniej będzie podczas deklaracji nie podawać typu danych. Oczywiście to czy deklarując zmienną podawać jej typ należy rozpatrywać pisząc konkretny program. Więcej informacji na temat typów danych znajdziesz na stronie Typy danych - gdzie umieszczona jest tabela przedstawiająca dopuszczalne typy danych stosowane w VBA, włączając w to ich rozmiar oraz zakres.


Jawne deklarowanie:

Deklarowanie zmiennych za pomocą słów kluczowych Dim, Private, Public, oraz Static nazywamy jawnym deklarowaniem. Zmienna w języku Visual Basic może być też niejawnie zadeklarowana po prostu przez użycie jej w instrukcji przypisania. Wszystkie zmienne zadeklarowane niejawnie są typu Variant. Zmienne typu Variant wymagają więcej zasobów pamięci niż większość innych zmiennych. Jawne deklarowanie wszystkich zmiennych redukuje niebezpieczeństwo wystąpienia błędów wynikających z konfliktów nazw i pomyłek w pisowni. Aby uniknąć przykrych niespodzianek dobrze byłoby wyrobić sobie nawyk jawnego deklarowania wszystkich zmiennych. Bardzo pomocna w tym może okazać się instrukcja Option Explicit. Jeżeli w sekcji deklaracji modułu kodu wpiszesz:

Option Explicit

VBA wyświetli komunikat o błędzie, ilekroć wykryje niezadeklarowaną zmienną. W takim przypadku możemy dodać brakującą deklarację. Instrukcja Option Explicit wykorzystywana jest na poziomie modułu w celu wymuszenia jawnego deklarowania wszystkich zmiennych w danym module.


Zakres zmiennej:

Zakres zmiennej czyli to, w jakich częściach programu jest ona dostępna, określamy podczas jej deklarowania. Zakres ten zależy od:

  • miejsca, w którym zmienna jest zadeklarowana, w sekcji deklaracji modułu czy wewnątrz konkretnej procedury.
  • za pomocą jakiego słowa kluczowego tj. Dim, Public, Private, lub Static, zmienna została zadeklarowana.

Poniżej przedstawiam kilka przykładów deklaracji. Tekst w kolorze zielonym zaczynający się od znaku ' jest komentarzem i nie ma wpływu na działanie przykładów.

Dim MojaLiczba 'Instrukcja ta może być umieszczona wewnątrz procedury, wówczas zostanie utworzona zmienna na poziomie procedury. Jeżeli natomiast deklaracja zostanie umieszczona na początku modułu, w sekcji deklaracji, utworzona będzie zmienna na poziomie modułu.

Private MojaZmienna 'Stosowana na poziomie modułu do deklaracji zmiennych prywatnych oraz do przydziału pamięci. Zmienne te są dostępne tylko w tym module, w którym zostały zadeklarowane. Słowa kluczowego Private nie można użyć wewnątrz procedury.

Public WynikRazem 'Stosowana do deklarowania zmiennych publicznych na poziomie modułu. Zmienne zadeklarowane za pomocą instrukcji Public są dostępne dla wszystkich procedur we wszystkich modułach wszystkich projektów. Słowo kluczowe Public należy stosować wyłącznie w sekcji deklaracji modułu.

Static Licznik 'Wykorzystywana na poziomie procedury do deklaracji zmiennych i przydziału pamięci. Zadeklarowana w ten sposób zmienna zachowuje swoją wartość między wywołaniami procedury. Zmienne statyczne można deklarować tylko wewnątrz procedur.

Więcej informacji na temat zakresu zmiennych znajdziesz na stronie: http://dzono4.webpark.pl/basic/opisvb/zmizakr.htm


Przypisanie wartości do zmiennej:

Jak już wspomniałem zmienne służą do przechowywania wartości, które mogą się zmieniać podczas działania programu. Aby zmienna mogła przechowywać pewne określone wartości musimy to wartość przypisać do zmiennej. Operacje przypisania wartości do zmiennej nazywamy instrukcją przypisania. Instrukcja przypisania składa się z nazwy zmiennej, znaku równości oraz wartości (lub wyrażenia określającego wartość), która ma być przypisana do zmiennej. Poniżej przedstawiam kilka przykładów przypisania wartości do zmiennej.

MojaWartosc = 3 'Zmiennej o nazwie MojaWartosc przypisujemy wartość 3.

Przywitanie = "Pozdrawiam wszystkich" 'W tym przypadku instrukcja przypisania przypisuje tekst umieszczony z prawej strony znaku równości do zmiennej Powitanie. Łańcuchy znakowe przypisywane do zmiennych należy ujmować w cudzysłów.

Nazwisko = InputBox("Jak się nazywasz?") 'W instrukcji przypisania możemy użyć funkcji. W przykładzie przypisujemy wartość zwróconą przez funkcje InputBox, zmiennej Nazwisko.

MojaLiczba = Int((6 * Rnd) + 1) 'A oto inny przykład przypisania. Zmiennej MojaLiczba przypisujemy wartość wyrażenia z prawej strony znaku równości.


Wartości domyślne:

Być może zastanawiacie się co się kryje w zmiennych po ich zadeklarowaniu ale jeszcze przed przypisaniem im wartości. W tym czasie VBA nadaje zmiennym następujące wartości domyślne:

Tabela. Wartości domyślne zmiennych

Typ danych Wartość domyślna
Wszystkie numeryczne typy danych 0 (zero)
String (o zmiennej długości) Łańcuch znaków o zerowej długości ("").
String (o stałej długości) Łańcuch znaków o zadanej długości wypełniony znakami o kodzie ASCII równym 0 (jest to znak niedrukowany).
Variant Empty (specjalna wartość wskazująca zmienną bez wartości).
Obiect Wartość umowna Nothing (nic).


Zmienne statyczne:

Z tematem zmiennych statycznych zetknęliśmy się już na tej stronie przy omawianiu zakresu zmiennej. Jeżeli chcemy aby zmienna zachowała swoją wartość nawet po wykonaniu procedury, w której jest zadeklarowania skorzystamy ze słowa kluczowego Static. Instrukcja Static wykorzystywana jest na poziomie procedury do deklaracji zmiennych i przydziału pamięci. Zadeklarowana w ten sposób zmienna zachowuje swoją wartość między wywołaniami procedury.

Static Licznik

Zmienne statyczne zachowują swoją wartość nadaną im w efekcie wykonania procedury. W przypadku ponownego wykonania procedury zmienna statyczna ma początkowo tę samą wartość, jaką uzyskała w poprzednim wykonaniu tej procedury. Zmienne statyczne można deklarować tylko wewnątrz procedur.

Mała uwaga: zmiennych statycznych nie należy mylić ze stałymi, temat stałych przedstawię w dalszej części kursu.


Przykład:

Przykład kod przykładu:

Private Sub CommandButton1_Click()
 Dim MojaLiczba As Integer
 Static Licznik
  MojaLiczba = Int((6 * Rnd) + 1)
  Licznik = Licznik + 1
  MsgBox "To jest Twoje " & Licznik & " losowanie " & "wylosowałeś " & MojaLiczba
End Sub

Przykład opis:

Przykład być może nie jest zbyt ciekawy chciałem w nim po prostu praktycznie zademonstrować wiedzę zawarto na tej stronie. W przykładzie deklarujemy dwie zmienne. Za pomocą instrukcji Dim deklarujemy zmienną o nazwie MojaLiczba, ponieważ wiemy jakie wartości zmienna będzie przechowywać określamy też jej typ czyli Integer. Następnie deklarujemy zmienną statyczną o nazwie Licznik. Wykorzystując funkcje Int i Rnd zmiennej MojaLiczba przypisujemy losowo wybrano wartość z przedziału od 1 do 6. Następnie zwiększamy wartość zmiennej Licznik o 1 przy każdym wykonaniu procedury. Na koniec za pomocą funkcji MsgBox wyświetlamy komunikat o wartości wylosowanej i liczbie losowań. Opisany kod umieściliśmy w procedurze zdarzenia Click Przycisku polecenia CommandButton1.

Przykład kroki:

Aby przetestować przykład stosując analogie wykonaj kroki jak na przykład na stronie pierwszy program.


Słownictwo:

  • Empty - wartość specjalna wskazuje, że do zmiennej typu Variant nie przypisano żadnej początkowej wartości. Zmienna Empty dla wartości numerycznych jest równa 0, a dla ciągów znaków jest ciągiem znaków o długości zerowej ("").
  • Nothing - wartość specjalna oznacza, że zmienna nie odwołuje się do żadnego określonego wystąpienia obiektu.

Uwagi:

  • Tekst w kolorze zielonym zaczynający się od znaku ' jest komentarzem i nie ma wpływu na działanie przykładów.
  • Jeżeli masz uwagi to proszę poinformuj mnie o tym. Każda uwaga czy opinia jest dla mnie bardzo cenna.
  • Poszukuję informacji na temat VBA mogą to być kursy, tytuły książek czy adresy stron internetowych. Jeżeli posiadasz własną stronę nie koniecznie na temat VBA to proszę podaj mi jej adres.



Strona istnieje od 30-05-2005

Ostatnie zmiany 30-05-2005

Wyraź swoja opinię o stronie i wpisz się do książki gości