1. Wprowadzenie do zmiennych VBA.
W VBA, jak w pozostałych językach programowania mamy do czynienia ze zmiennymi. Język VBA nie wymaga deklarowania zmiennych. Możemy np wpisać nazwę, która zostanie zinterpretowana jako zmienna, a następnie wykonywać na niej dowolne instrukcje. Przykład zamieszczam
poniżej.
Sub VarDef() MsgBox (MyVar * 5) End Sub
Wynik działania z przykładu to 0. Oznacza to, że zmienna przyjęła od samego początku typ numeryczny. Wiemy to stąd, że wartość default dla typów liczbowych wynosi 0. Po co w takim razie powinniśmy definiować zmienne VBA? Poprawne definiowanie zmiennych jest jedną z zasad dobrego programowania. Pozwala uniknąć przyszłych konfliktów w naszym kodzie. Unikamy także przypadków, gdy nasze zmienne w toku działania kodu mogą uzyskać nieporządany wynik. Dobrą zasadą jest także dodawanie przedrostka określającego typ danych do nazwy zmiennej np intLicznik, strTekst, datStart itp. Jeśli chcemy, by edytor VisualBasic informował nas za każdym razem, gdy korzystamy z niezadeklarowanej zmiennej, powinniśmy wpisać frazę Option Explicit przed nazwą naszego programu. Edytor VB zwróci nam komunikat z informacją o błędzie podczas uruchamiania kodu.
Option Explicit Sub VarDef() zmiennaNiezadeklarowana = 3 End Sub
2. Jak deklarować zmienne VBA
Zmienne w kodzie VBA deklarujemy poprzez dodanie frazy Dim przed nazwą zmiennej oraz dodając na końcu właściwy typ danych. Jest to tzw. jawne deklarowanie zmiennych. Fraza Dim informuje nas o tym, że zmienna została zadeklarowana na poziomie danej procedury Sub(). W późniejszym kodzie programu musimy starać się unikać konfliktów, np nie przypiszemy tekstu do typu danych liczbowych itp. Wszystkie dostępne typy danych w Excel VBA możemy poznać w tym rozdziale w dalszej części szkolenia.
Sub VarDef() Dim intVar As Integer Dim datVar as Date Dim strVar as String MsgBox (intVar * 5) End Sub
3. Przypisywanie wartości do zmiennych
Ok, wiesz już, czym jest deklarowanie zmiennych i czym są typy danych. Spróbujmy teraz zrobić prosty przykład, definiując zmienne, ich typ danych, a następnie przypisać do nich właściwe wartości. Przypisywania wartości do wcześniej zadeklarowanej zmiennej dokonujemy poprzez wprowadzenie nazwy zmiennej, znaku równości oraz wartości, którą chcemy przypisać. Przykład poniżej.
Sub VarDef() Dim intVar As Integer Dim datVar As Date Dim strVar As String intVar = 100 datVar = "2016/01/01" strVar = "Dowolny tekst" MsgBox (intVar) MsgBox (datVar) MsgBox (strVar) End Sub
W powyższym przykładzie przypisaliśmy datę do wcześniej zadeklarowanej zmiennej varDat. Możemy zauważyć, że maska wprowadzania daty w kodzie VB wygląda w sposób następujący „RRRR/MM/DD„. Jak widzisz, wartości dla zmiennych liczbowych przypisujemy bez cudzysłowu. Zmienne dla tekstu i dat pisane są z cudzysłowem.
4.Działania na zmiennych
W momencie, gdy nasze zmienne VBA są już zdefiniowane i mają przypisane wartości, możemy wykonywać na nich dowolne działania korzystając z kodu VBA. Zróbmy prosty przykład wykorzystując wcześniej zadeklarowane zmienne. Ciąg testowy połączmy z innym ciągiem tekstowy. Na liczbie wykonajmy działanie arytmetyczne. W przypadku daty wykonajmy prostą funkcję zwracającą miesiąc. Na koniec wyświetlmy cały przykład przy wykorzystaniu okna MsgBox.
Sub VarDef() Dim intVar As Integer Dim datVar As Date Dim strVar As String intVar = 100 datVar = "2016/01/01" strVar = "tekst nr 1 " strVar2 = "tekst nr 2 " MsgBox (intVar * 10) MsgBox (Month(datVar)) MsgBox (strVar + strVar2) End Sub
Jak możemy zauważyć do łączenia ciągów znaków wykorzystaliśmy operator „+”.
5. Poziomy deklaracji zmiennych
Do tej pory deklarowaliśmy zmienne na poziomie procedury poprzez dodanie frazy Dim przed nazwą zmiennej. Do deklaracji zmiennych możemy używać także fraz Static, Public, Private. Sam opis wszystkich sposobów opisuję w poniższej tabeli.
Poziom deklaracji | Opis |
Dim | Zmienna zadeklarowana na poziomie procedury. Działa tylko i wyłączenie w obrębie procedury. |
Static | Zmienna stosowana dla licznika. Nie traci swojej wartości pomiędzy kolejnymi wywołaniami procedury. |
Private | Zmienna zadeklarowana na poziomie Private. Działa w obrębie modułu i procedur w module, w którym została zadeklarowana. |
Public | Zmienna zadeklarowana na poziomie Public. Działa w obrębie wszystkich modułów i wszystkich procedur. |
6. Przykład wykorzystania zmiennej liczbowej
Napiszmy krótki program obliczający pole kwadratu na podstawie długości jego boku. Program powinien wywoływać okno InputBox, w którym wpisywać będziemy długość boku kwadratu. W dalszej kolejności program w komórce A1 arkusza wprowadzi wartość słowną „Pole kwadratu: „, a w komórce B2 wynik działania. Do dzieła!
Sub IntExample() Dim intSquare As Single Dim strTxt As String strTxt = "Pole kwadratu: " intSquare = InputBox("Wprowadź długość boku kwadratu w formie liczby całkowitej: ") Range("A1") = strTxt Range("B1") = intSquare * intSquare End Sub
7. Zadania (Rozwiązanie możesz wpisać w komentarzu)
7.1. Zmodyfikuj przykład z zadania 6, wyświetlający wynik działania w formie komunikatu MsgBox.
7.2 Stwórz i przetestuj zmienną zadeklarowaną na poziomie public. Zobacz, czy działa także w kodzie innych modułów i procedur.
8 komentarzy “Zmienne w Excel VBA”
Czy Option Explicit można wykorzystać także w bazach Access?
Zadanie 7.1
Option Explicit
Sub IntExample()
Dim intSquare As Single
Dim strTxt As String
strTxt = „Pole kwadratu: ”
intSquare = InputBox(„Wprowadź długość boku kwadratu w formie liczby całkowitej: „)
MsgBox („Pole kwadratu wynosi: ” & intSquare * intSquare)
End Sub
Super ! dzieki
Sub zadanie_zmienne()
Dim intsquare As Single
Dim strtekst As String
strtekst = „Pole kwadratu”
intsquare = InputBox(„Wprowadź długość boku kwadratu”)
MsgBox (strtekst & vbCrLf & intsquare * intsquare)
End Sub
zad 7.1
Sub polekwadratu()
Dim intkrawadz As Single
Dim strText As String
strText = „Pole kwadratu: ”
intkrawadz = InputBox(„Wprowadz wartość krawędzi w formie liczby całkowitej: „)
MsgBox strText & intkrawadz * intkrawadz
End Sub
Dim intSquare As Single
Dim strTxt As String
strTxt = „Pole kwadratu”
intSquare = InputBox(„Wprowadz długość kwadratu w formie liczby całkowitej”)
Range(„A1”) = strTxt
Range(„B1”) = intSquare * intSquare
MsgBox (Range(„B1”))
Dim intSquare As Single
Dim strTxt As String
strTxt = „Pole kwadratu”
intSquare = InputBox(„Wprowadz długość kwadratu w formie liczby całkowitej”)
Range(„A1”) = strTxt
Range(„B1”) = intSquare * intSquare
MsgBox (Range(„B1”))
Option Explicit
Sub Zadanie7_2()
Public strA As String
End Sub
Sub Zadanie7_1()
Dim intSquare As Single
Dim strTxt As String
strTxt = „Pole kwadratu: ”
intSquare = InputBox(„Wprowadz dlugosc boku kwadratu w formie liczby calkowitej: „)
strA = „Bubu”
MsgBox strTxt & intSquare * intSquare & vbCrLf & „Milego dnia”, , „Wyliczenia”
MsgBox („Buy-buy ” & strA)
End Sub