Post on 09-Oct-2018
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 1
Visual Basic dla AplikacjiVisual Basic dla AplikacjiVisual Basic dla Aplikacji
Kod Visual Basic - PodstawyKod Visual Basic Kod Visual Basic -- PodstawyPodstawy
WykWykłładad
dr indr inżż. Zbigniew Zakrzewski. Zbigniew Zakrzewski v. 1.2.2v. 1.2.2
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 2
Zastosowanie języka Visual Basic
1. MS Office (95, 97, 2000, XP, 2003, 2007) – jako VBA:Word,Excel,PowerPoint,Access,Publisher,Visio.
2. MS Windows (Win95 i NT) – jako VBS lub WSH.3. MS Server – jako VBS lub ASP (Active Server Pages).4. MS Outlook – jako VBS oraz VBA.5. MS Internet Explorer – jako VBS.6. AutoCAD firmy AutoDesk – jako VBS.7. Corel (pakiet graficzny) – jako VBA.
1. MS Office (95, 97, 2000, XP, 2003, 2007) – jako VBA:Word,Excel,PowerPoint,Access,Publisher,Visio.
2. MS Windows (Win95 i NT) – jako VBS lub WSH.3. MS Server – jako VBS lub ASP (Active Server Pages).4. MS Outlook – jako VBS oraz VBA.5. MS Internet Explorer – jako VBS.6. AutoCAD firmy AutoDesk – jako VBS.7. Corel (pakiet graficzny) – jako VBA.
Windows Script Host
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 3
Zasadnicze elementy języka wysokiego poziomu
1. Projekt (zestaw modułów oraz formularzy);
2. Moduł (zestaw procedur oraz funkcji);
3. Procedura (podprogram zawierający instrukcje);
4. Instrukcja (słowo kluczowe samodzielne lub grupowe);
5. Zmienna (statyczna lub dynamiczna, dane);
6. Stała (zmienna z wartością ustaloną przy deklaracji);
7. Operator (pojedynczy znak symbolizujący operację);
8. Przedrostek (znak lub zestaw znaków, skrót polecenia).
1. Projekt (zestaw modułów oraz formularzy);
2. Moduł (zestaw procedur oraz funkcji);
3. Procedura (podprogram zawierający instrukcje);
4. Instrukcja (słowo kluczowe samodzielne lub grupowe);
5. Zmienna (statyczna lub dynamiczna, dane);
6. Stała (zmienna z wartością ustaloną przy deklaracji);
7. Operator (pojedynczy znak symbolizujący operację);
8. Przedrostek (znak lub zestaw znaków, skrót polecenia).
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 4
Etykieta w programowaniu VBA
Poprawne nazewnictwo zmiennych i obiektów:– nazwa winna rozpoczynać się od litery;– wewnątrz nazwy można używać znaku podkreślenia;– nazwa nie może zawierać znaków interpunkcyjnych:
! @ & ‘ $ # ? , * . { } ( ) [ ] = + - ^ % / \ ~ < > : ; ”– nazwa nie może zawierać spacji;– nie wskazane jest stosowanie w nazwach polskich liter;– nazwa zmiennej może maksymalnie zawierać 255 znaków;– nazwa formularza lub formantu może zawierać do 40 znaków;– nazwa nie może być taka sama jak nazwa funkcji, instrukcji lub metody
wbudowanej;– moduł kodu nie może zawierać procedur o tych samych nazwach;– nazwy zmiennych mogą się powtarzać, gdy są deklarowane lokalnie w
procedurach, a nie w sekcji deklaracji modułu;– należy zwrócić uwagę, że VBA nie rozróżnia wielkich i małych liter.
Poprawne nazewnictwo zmiennych i obiektów:– nazwa winna rozpoczynać się od litery;– wewnątrz nazwy można używać znaku podkreślenia;– nazwa nie może zawierać znaków interpunkcyjnych:
! @ & ‘ $ # ? , * . { } ( ) [ ] = + - ^ % / \ ~ < > : ; ”– nazwa nie może zawierać spacji;– nie wskazane jest stosowanie w nazwach polskich liter;– nazwa zmiennej może maksymalnie zawierać 255 znaków;– nazwa formularza lub formantu może zawierać do 40 znaków;– nazwa nie może być taka sama jak nazwa funkcji, instrukcji lub metody
wbudowanej;– moduł kodu nie może zawierać procedur o tych samych nazwach;– nazwy zmiennych mogą się powtarzać, gdy są deklarowane lokalnie w
procedurach, a nie w sekcji deklaracji modułu;– należy zwrócić uwagę, że VBA nie rozróżnia wielkich i małych liter.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 5
Etykieta w programowaniu VBA c.d.
Poprawianie czytelności kodu poprzez wstawianie wcięć.Cel: wyróżnianie bloków kodu, np. wyróżnianie zagnieżdżonych instrukcji:
warunku If ... Then ...Else, pętli Do ... Loop lub pętli For ... Next.Przykład:
Do While x3 <> 20 ‘ Początek pętlix1 = x1 +1
If x1 = x2 Then ‘ Początek warunkux1 = 5 ‘ Podprogram warunku spełnionegox2 = 10
Else ‘ W innym przypadkux1 = x2 ‘ Podprogram dla warunkux3 = 20 ‘ niespełnionego
End IfLoop ‘ Koniec pętli
Poprawianie czytelności kodu poprzez wstawianie wcięć.Cel: wyróżnianie bloków kodu, np. wyróżnianie zagnieżdżonych instrukcji:
warunku If ... Then ...Else, pętli Do ... Loop lub pętli For ... Next.Przykład:
Do While x3 <> 20 ‘ Początek pętlix1 = x1 +1
If x1 = x2 Then ‘ Początek warunkux1 = 5 ‘ Podprogram warunku spełnionegox2 = 10
Else ‘ W innym przypadkux1 = x2 ‘ Podprogram dla warunkux3 = 20 ‘ niespełnionego
End IfLoop ‘ Koniec pętli
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 6
Etykieta w programowaniu VBA c.d.
Kontynuacja wiersza kodu w nowej linii.Cel: Możliwość wizualnej analizy długiego wiersza poleceń jako całości.
Przykład:MsgBox ”Aby przenieść część instrukcji VBA do ” & _
”następnego wiersza kodu, wpisz znak spacji” & _” oraz znak podkreślenia na końcu wiersza.”
Opatrywanie kodu VBA w komentarze.Public Sub Zmienne Rem Deklaracja nowej procedury
Dim x , y As Integer Rem Deklaracja zmiennychx = 10 ‘ Przypisanie wartości zmiennej xy = 20 ‘ Przypisanie wartośći zmiennej y
End Sub ‘ Zakończenie kodu procedury
Kontynuacja wiersza kodu w nowej linii.Cel: Możliwość wizualnej analizy długiego wiersza poleceń jako całości.
Przykład:MsgBox ”Aby przenieść część instrukcji VBA do ” & _
”następnego wiersza kodu, wpisz znak spacji” & _” oraz znak podkreślenia na końcu wiersza.”
Opatrywanie kodu VBA w komentarze.Public Sub Zmienne Rem Deklaracja nowej procedury
Dim x , y As Integer Rem Deklaracja zmiennychx = 10 ‘ Przypisanie wartości zmiennej xy = 20 ‘ Przypisanie wartośći zmiennej y
End Sub ‘ Zakończenie kodu procedury
Kod
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 7
Typy danychTyp Opis Zakres wartości Pamięć
Boolean Wartość logiczna Prawda (True) lub Fałsz (False) 2 bajty
Byte Mała liczba całkowita Od 0 do 255 1 bajt
Integer Liczba całkowita Od -32 768 do 32 767 2 bajty
Long Liczba całkowita Od -2 147 483 648 do 2 147 483 647 4 bajty
Single Wartośćzmiennoprzecinkowa pojedynczej precyzji
Od -3.402823E38 do -1.401298E-45dla ujemnych wartości oraz od 1.401298E-45 do 3.402823E38 dla dodatnich wartości
4 bajty
Double Wartośćzmiennoprzecinkowa podwójnej precyzji
Od -1.79769313486231E308 do -4.94065645841247E-324 dla dodatnich wartości oraz od 4.94065645841247E-324 do 1.79769313486232E308 dla ujemnych
8 bajtów
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 8
Typy danych c.d.Typ Opis Zakres wartości Pamięć
Currency Duża precyzyjna liczba (do 19 cyfr)
Od –922 337 203 685 477, 5808 do 922 337 203 685 477,5807; cztery cyfry na prawo od przecinka
8 bajtów
Decimal Bardzo duża, bardzo precyzyjna liczba (do 29 cyfr)
+/-79228162514264337593543950335bez przecinka ;+/-7.9228162514264337593543950335 z 28 miejscami na prawo od przecinka;najmniejsza niezerowa liczba: +/-0.0000000000000000000000000001
14 bajtów
Date Daty i godziny Od 1 stycznia 100r. do 31 grudnia 9999r. 8 bajtów
Object Obiekt Odniesienie do obiektu 4 bajty
String Tekst o zmiennej długości
Od 0 do około 2 miliardów znaków 10 bajtów +długośćłańcucha
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 9
Typy danych c.d.Typ Opis Zakres wartości Pamięć
String Tekst o stałej długości
Od 1 do około 65400znaków
długośćłańcucha
Variant Dowolna wartość
Wartość numeryczna – typ Double. Tekst o zmiennej długości od 0 do około 2 miliardów znaków
22 bajty + długośćłańcucha
Typ niestandardowy zdefiniowany za pomocą struktury Type
Grupa zmiennych używana jako całość
Dopuszczalna wartośćkonkretnej zmiennej tworzącej grupę zależy od typu tej zmiennej
zależna od składników
Type DanePersonalne ‘ Tworzę typ zmiennej użytkownika. ID As Integer ‘ Tworzę elementy danych typu użytkownika. Nazwisko As String * 20 Adres As String * 30
End Type
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 10
Deklaracja zmiennych
Option Explicit Pozycja – początek modułu.Wymuszenie deklaracji zmiennych. Przejrzystość kodu.
Zasadnicza składnia podstawowego sposobu deklaracji zmiennej:Dim Zmienna As Typ_Danych
Static Zmienna1 As Typ_Danych1
DynamicznaStatyczna
Przykłady:
Dim x1 As Integer, x2 As Integer
Dim z2 As DoubleDim tekst1 As string*56Static tekst2 As string
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 11
Deklaracja zmiennej i jej zasięg
Zasięg zmiennej zależy od:• miejsca, w którym zmienna jest zadeklarowana (sekcja
deklaracji modułu, wnętrze procedury);• słowa kluczowego służącego do deklarowania zmiennej (Dim,
Public, Private lub Static).Przykłady:
Private Slowo As String ‘Deklaracja lokalnaDim Komunikat As String ‘Deklaracja lokalnaPublic Licznik As Long ‘Deklaracja
‘globalnaStatic Numer As Integer ‘Deklaracja lokalna
Zasięg zmiennej zależy od:• miejsca, w którym zmienna jest zadeklarowana (sekcja
deklaracji modułu, wnętrze procedury);• słowa kluczowego służącego do deklarowania zmiennej (Dim,
Public, Private lub Static).Przykłady:
Private Slowo As String ‘Deklaracja lokalnaDim Komunikat As String ‘Deklaracja lokalnaPublic Licznik As Long ‘Deklaracja
‘globalnaStatic Numer As Integer ‘Deklaracja lokalna
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 12
Deklaracja zmiennej statycznej
Cechy:• zmienna statyczna nie zmienia swojej wartości po wykonaniu
procedury;• globalna deklaracja w funkcji lub procedurze zamienia wszystkie
deklaracje na statyczne.Przykłady:
Static Numer As Integer
Private Static Sub Procedura()
Static Function Suma(x1 As Integer, _
x2 As Integer) As Double
Cechy:• zmienna statyczna nie zmienia swojej wartości po wykonaniu
procedury;• globalna deklaracja w funkcji lub procedurze zamienia wszystkie
deklaracje na statyczne.Przykłady:
Static Numer As Integer
Private Static Sub Procedura()
Static Function Suma(x1 As Integer, _
x2 As Integer) As Double
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 13
Deklarowanie wielu zmiennych w wierszu
Poprawna deklaracja zawiera (w kolejności):1. Słowo kluczowe (Dim, Private, Public),2. Nazwę zmiennej,3. Słowo kluczowe (As),4. Typ zmiennej.
Po umieszczeniu znaku przecinka można powtórzyć punkty 2, 3 i 4.
Dim x1 As Integer, x2 As Integer, x3 As Integer
Dim a1 As Currency, d1 As Date, s1 As String
Dim x1, x2, x3 As Integer : Dim x4
Poprawna deklaracja zawiera (w kolejności):1. Słowo kluczowe (Dim, Private, Public),2. Nazwę zmiennej,3. Słowo kluczowe (As),4. Typ zmiennej.
Po umieszczeniu znaku przecinka można powtórzyć punkty 2, 3 i 4.
Dim x1 As Integer, x2 As Integer, x3 As Integer
Dim a1 As Currency, d1 As Date, s1 As String
Dim x1, x2, x3 As Integer : Dim x4
Kod
Uwaga: Zmienne typu Variant.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 14
Stała literalna (symboliczna)
Cel:• określenie wartości, która nie zmienia się w czasie działania
programu;• możliwość globalnej zmiany deklaracji stałej stosowanej w
programie;• na stałe przypisanie nazw wartościom, w celu podniesienia
czytelności kodu.Przykłady:
Public Const Nazwisko As String = ”Kowalski”Private Const Data As Date = #1/10/1998#Const Stan As Boolean = TrueConst Poniedziałek = 1, Wtorek = 2
Cel:• określenie wartości, która nie zmienia się w czasie działania
programu;• możliwość globalnej zmiany deklaracji stałej stosowanej w
programie;• na stałe przypisanie nazw wartościom, w celu podniesienia
czytelności kodu.Przykłady:
Public Const Nazwisko As String = ”Kowalski”Private Const Data As Date = #1/10/1998#Const Stan As Boolean = TrueConst Poniedziałek = 1, Wtorek = 2
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 15
Wykorzystanie przyrostków w deklaracjach
Przyrostek Typ zmiennej Przykład deklaracji
% Integer Dim zmienna1%, zmienna2%
Dim wartosc1&, wartosc2&
Dim slowo1!, slowo2!
Dim x#, y#
Dim x As Double, y As Double
Dim placa1@, placa2@
Dim lancuch1$, lancuch2$
& Long
! Single
# Double
@ Currency
$ String
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 16
Definiowanie niestandardowego typu danych[Private | Public] Type nazwa_typu
nazwa_elementu [([indeksy])] As typ[nazwa_elementu[([indeksy])] As typ]. . .
End TypePublic Element nieobowiązkowy. Deklarowanie typów zdefiniowanych przez
użytkownika dostępnych we wszystkich procedurach, modułach, projektach.
Private Element nieobowiązkowy. Deklarowanie typu definiowanego przez użytkownika dostępnego tylko wewnątrz modułu.
nazwa_typu Element obowiązkowy. Nazwa typu definiowanego przez użytkownika.
nazwa_elementu Element obowiązkowy. Nazwa elementu typu definiowanego przez użytkownika.
indeksy Element nieobowiązkowy. Wymiary elementu będącego tablicą. Argument indeksy ma następującą składnię: [indeks_dolny Toindeks_górny]
typ Element obowiązkowy. Dowolnego rodzaju z wcześniejszej tabeli.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 17
Charakterystyka zmiennej typu „Variant”
Cechy:• uniwersalność;• możliwość przyporządkowania wartości dowolnego typu;• dynamiczna zmiana typu wartości;• zajętość dużego bloku pamięci oraz spowolnienie programu.Przykład:Dim WszystkieDane As Variant, TypDanychWszystkieDane = 3WszystkieDane = ”Dobrze”WszystkieDane = #1/10/1998 19:05:21#
‘ Zapytanie o typ bieżącej wartościTypDanych = TypeName(WszystkieDane) ‘ Date
Cechy:• uniwersalność;• możliwość przyporządkowania wartości dowolnego typu;• dynamiczna zmiana typu wartości;• zajętość dużego bloku pamięci oraz spowolnienie programu.Przykład:Dim WszystkieDane As Variant, TypDanychWszystkieDane = 3WszystkieDane = ”Dobrze”WszystkieDane = #1/10/1998 19:05:21#
‘ Zapytanie o typ bieżącej wartościTypDanych = TypeName(WszystkieDane) ‘ Date
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 18
Operatory arytmetyczne
Operator Operacja Przykład
+ Dodawanie 2 + 1 x + y
- Odejmowanie i negacja 2 – 1 -x
* Mnożenie 3 * 4 x * y
x ^ y
x / y
x \ y
x Mod y
Sqr(x)
^ Potęgowanie 2 ^ 3
/ Dzielenie 2 / 3
\ Dzielenie całkowite 2 \ 3
Mod Reszta z dzielenia 5 Mod 2
Sqr Pierwiastek kwadratowy Sqr(4)
Funkcja posiadająca charakter operatora
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 19
Operatory porównywania i konkatenacji
Operator Operacja Przykład
= Równość, przypisanie x = 2 x = y
<> Nierówność x <> 2 x <> y
x < y
x > y
x <= y
x >= y
Like Porównywanie łańcuchów "aBBBa" Like "a*a"
< Mniejszy x < 2
> Większy x > 2
<= Mniejszy lub równy x <= 2
>= Większy lub równy x >= 2
Is Sprawdzanie odwołań Object1 Is Object2
& lub + Konkatenacja łańcuchów "Wynik: " & x
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 20
Przykłady zastosowań operatora „Like”
Dim MojWynikMojWynik = "aBBBa" Like "a*a" ‘ Zwraca True.MojWynik = "F" Like "[A-Z]" ‘ Zwraca True.MojWynik = "F" Like "[!A-Z]" ‘ Zwraca False.MojWynik = "a2a" Like "a#a" ‘ Zwraca True.MojWynik = "aM5b" Like "a[L-P]#[!c-e]" ‘ Zwraca True.MojWynik = "BAT123khg" Like "B?T*" ‘ Zwraca True.MojWynik = "CAT123khg" Like "B?T*" ‘ Zwraca False.
Znaki kluczowe w łańcuchu wzorcowym:? - dowolny pojedynczy znak,* - zero lub więcej znaków,# - dowolna pojedyncza cyfra (0–9),[Lista] - dowolna pojedyncza litera z <Lista>,[!Lista] - dowolna pojedyncza litera z poza <Lista>,! - negacja listy liter.
Dim MojWynikMojWynik = "aBBBa" Like "a*a" ‘ Zwraca True.MojWynik = "F" Like "[A-Z]" ‘ Zwraca True.MojWynik = "F" Like "[!A-Z]" ‘ Zwraca False.MojWynik = "a2a" Like "a#a" ‘ Zwraca True.MojWynik = "aM5b" Like "a[L-P]#[!c-e]" ‘ Zwraca True.MojWynik = "BAT123khg" Like "B?T*" ‘ Zwraca True.MojWynik = "CAT123khg" Like "B?T*" ‘ Zwraca False.
Znaki kluczowe w łańcuchu wzorcowym:? - dowolny pojedynczy znak,* - zero lub więcej znaków,# - dowolna pojedyncza cyfra (0–9),[Lista] - dowolna pojedyncza litera z <Lista>,[!Lista] - dowolna pojedyncza litera z poza <Lista>,! - negacja listy liter.
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 21
Operatory logiczne
Operator Operacja Przykład
Not Negacja Not(x > y)
And Koniunkcja x > y And a > b
Or Alternatywa x > y Or a > b
Xor Alternatywa wykluczająca x > y Xor a < b
Eqv Równoważność x > y Eqv a > b
Imp Implikacja x > y Imp a > b
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 22
Operacje logiczne (Not, And)
Zastosowanie operatora: „Not”Dim Test1, A, B, C, D
A = 10 : B = 8 : C = 6 : D = Null ' Przypisanie.Test1 = Not(A > B) ' Zwraca False. Test1 = Not(B > A) ' Zwraca True. Test1 = Not(C > D) ' Zwraca Null. Test1 = Not A ' Zwraca -11 (negacja bitów).
Zastosowanie operatora: „And”Dim Test2, A, B, C, D
A = 10 : B = 8 : C = 6 : D = Null ' Przypisanie.Test2 = A > B And B > C ' Zwraca True. Test2 = B > A And B > C ' Zwraca False. Test2 = A > B And B > D ' Zwraca Null.Test2 = A And B ' Zwraca 8 (mnożenie bitów).
Zastosowanie operatora: „Not”Dim Test1, A, B, C, D
A = 10 : B = 8 : C = 6 : D = Null ' Przypisanie.Test1 = Not(A > B) ' Zwraca False. Test1 = Not(B > A) ' Zwraca True. Test1 = Not(C > D) ' Zwraca Null. Test1 = Not A ' Zwraca -11 (negacja bitów).
Zastosowanie operatora: „And”Dim Test2, A, B, C, D
A = 10 : B = 8 : C = 6 : D = Null ' Przypisanie.Test2 = A > B And B > C ' Zwraca True. Test2 = B > A And B > C ' Zwraca False. Test2 = A > B And B > D ' Zwraca Null.Test2 = A And B ' Zwraca 8 (mnożenie bitów).
Kod
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 23
Operacje logiczne (Or, Xor)
Zastosowanie operatora: „Or”Dim Test3, A, B, C, D
A = 10 : B = 8 : C = 6 : D = Null ‘ Przypisanie.Test3 = A > B Or B > C ' Zwraca True. Test3 = A > B Or B > D ' Zwraca True.Test3 = B > D Or B > A ' Zwraca Null. Test3 = A Or B ' Zwraca 10 (sumowanie bitów).
Zastosowanie operatora: „Xor”Dim Test4, A, B, C, D
A = 10 : B = 8 : C = 6 : D = Null ' Przypisanie. Test4 = A > B Xor B > C ' Zwraca False. Test4 = B > A Xor B > C ' Zwraca True. Test4 = B > A Xor C > B ' Zwraca False.Test4 = B > D Xor A > B ' Zwraca Null. Test4 = A Xor B ' Zwraca 2 (wykluczanie pary bitów).
Zastosowanie operatora: „Or”Dim Test3, A, B, C, D
A = 10 : B = 8 : C = 6 : D = Null ‘ Przypisanie.Test3 = A > B Or B > C ' Zwraca True. Test3 = A > B Or B > D ' Zwraca True.Test3 = B > D Or B > A ' Zwraca Null. Test3 = A Or B ' Zwraca 10 (sumowanie bitów).
Zastosowanie operatora: „Xor”Dim Test4, A, B, C, D
A = 10 : B = 8 : C = 6 : D = Null ' Przypisanie. Test4 = A > B Xor B > C ' Zwraca False. Test4 = B > A Xor B > C ' Zwraca True. Test4 = B > A Xor C > B ' Zwraca False.Test4 = B > D Xor A > B ' Zwraca Null. Test4 = A Xor B ' Zwraca 2 (wykluczanie pary bitów).
Kod
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 24
Operacje logiczne (Eqv, Imp)
Zastosowanie operatora: „Eqv”Dim Test5, A, B, C, D
A = 10 : B = 8 : C = 6 : D = Null ' Przypisanie. Test5 = A > B Eqv B > C ' Zwraca True. Test5 = B > A Eqv B > C ' Zwraca False. Test5 = A > B Eqv B > D ' Zwraca Null.Test5 = A Eqv B ' Zwraca -3 (porównanie bitów).
Zastosowanie operatora: „Imp”Dim Test6, A, B, C, D
A = 10 : B = 8 : C = 6 : D = Null ' Przypisanie.Test6 = A > B Imp B > C ' Zwraca True. Test6 = A > B Imp C > B ' Zwraca False. Test6 = B > A Imp C > B ' Zwraca True. Test6 = B > A Imp C > D ' Zwraca True. Test6 = C > D Imp B > A ' Zwraca Null. Test6 = B Imp A ' Zwraca -1 (włączanie bitów).
Zastosowanie operatora: „Eqv”Dim Test5, A, B, C, D
A = 10 : B = 8 : C = 6 : D = Null ' Przypisanie. Test5 = A > B Eqv B > C ' Zwraca True. Test5 = B > A Eqv B > C ' Zwraca False. Test5 = A > B Eqv B > D ' Zwraca Null.Test5 = A Eqv B ' Zwraca -3 (porównanie bitów).
Zastosowanie operatora: „Imp”Dim Test6, A, B, C, D
A = 10 : B = 8 : C = 6 : D = Null ' Przypisanie.Test6 = A > B Imp B > C ' Zwraca True. Test6 = A > B Imp C > B ' Zwraca False. Test6 = B > A Imp C > B ' Zwraca True. Test6 = B > A Imp C > D ' Zwraca True. Test6 = C > D Imp B > A ' Zwraca Null. Test6 = B Imp A ' Zwraca -1 (włączanie bitów).
Kod
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 25
Deklaracja tablic
Option Base {0 | 1} Początek modułu. Ograniczenie indeksów tablicy od dołu. Domyślna wartość „0”.
Tablice statyczneDim NazwaTablicy(n) As TypDanychDim NazwaTablicy(n,m,p,...) As TypDanychDim NazwaTablicy(n1 To n2,m1 To m2,p1 To p2, ...) As TypDanych
Tablice dynamiczneDim nazwatablicy() As TypDanych
Do 60 wymiarów
Option Base 1Dim miesiace(11) As StringPublic wyniki(10, 10, 2) As ByteStatic dane(1 To 5, 6 To 10) As DoublePrivate wartosci() ‘Tablica dynamiczna zmiennych Variant
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 26
Redeklaracja tablic dynamicznych (ReDim)
Cel stosowania - ponowny przydział pamięci dla zmiennych reprezentujących tablice dynamiczne (w procedurze).
ReDim [Preserve] nazwa_zmiennej (indeksy) [As typ][, nazwa_zmiennej (indeksy) [As typ]] . . .
Preserve Element nieobowiązkowy. Słowo kluczowe powodujące zachowanie danych istniejącej tablicy w przypadku zmiany jej ostatniego rozmiaru.
nazwa_zmiennej Element obowiązkowy. Nazwa tablicy.
indeksy Element nieobowiązkowy. Wymiary zmiennej tablicowej. Można zadeklarować do 60 wymiarów.Składnia: [indeks_dolny To] indeks_górny [ ,
[indeks_dolny To] indeks_górny] . . .typ Element nieobowiązkowy. Typ danych zmiennej tablicowej.
Możliwość zmiany tylko do dołu od typu Variant.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 27
Redeklaracja tablic dynamicznych c.d.
Przykład:Option Base 1Dim Tab() As Integer 'Deklaracja tablicy dynamicznej.ReDim Tab(3, 2) ‘Określenie rozmiaru tablicy.ReDim Tab(3, 4) ‘Zmiana rozmiaru tablicy.
... program wypełniający tablicę ...ReDim Preserve Tab(3, 5) ‘Zmiana rozmiaru z
‘zachowaniem wcześniej wprowadzonych danych.
Przykład:Option Base 1Dim Tab() As Integer 'Deklaracja tablicy dynamicznej.ReDim Tab(3, 2) ‘Określenie rozmiaru tablicy.ReDim Tab(3, 4) ‘Zmiana rozmiaru tablicy.
... program wypełniający tablicę ...ReDim Preserve Tab(3, 5) ‘Zmiana rozmiaru z
‘zachowaniem wcześniej wprowadzonych danych.
11 12 13 14
21 22 23 24
31 32 33 34
Tab Tab Tab TabTab Tab Tab TabTab Tab Tab Tab
⎡ ⎤⎢ ⎥⎢ ⎥⎢ ⎥⎣ ⎦
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
Tab Tab Tab Tab TabTab Tab Tab Tab TabTab Tab Tab Tab Tab
⎡ ⎤⎢ ⎥⎢ ⎥⎢ ⎥⎣ ⎦
Nowe elementy tablicy (macierzy)
Nienaruszona część tablicy (macierzy)
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 28
Odczyt indeksów tablicy
Odczyt dolnego indeksu tablicy:LBound(NazwaTablicy[, NumerWymiaru])
Odczyt górnego indeksu tablicy:UBound(NazwaTablicy[, NumerWymiaru])
Option Base 1Dim Dolna, GornaDim Matrix(1 To 10, 5 To 15, 10 To 20) Dim InnyMatrix(10) As Double
Dolna = LBound(Matrix, 1) ' Zwraca 1. Dolna = LBound(Matrix, 3) ' Zwraca 10. Dolna = LBound(InnyMatrix) ' Zwraca 1.Gorna = UBound(Matrix, 1) ' Zwraca 10. Gorna = UBound(Matrix, 3) ' Zwraca 20. Gorna = UBound(InnyMatrix) ' Zwraca 10.
Odczyt dolnego indeksu tablicy:LBound(NazwaTablicy[, NumerWymiaru])
Odczyt górnego indeksu tablicy:UBound(NazwaTablicy[, NumerWymiaru])
Option Base 1Dim Dolna, GornaDim Matrix(1 To 10, 5 To 15, 10 To 20) Dim InnyMatrix(10) As Double
Dolna = LBound(Matrix, 1) ' Zwraca 1. Dolna = LBound(Matrix, 3) ' Zwraca 10. Dolna = LBound(InnyMatrix) ' Zwraca 1.Gorna = UBound(Matrix, 1) ' Zwraca 10. Gorna = UBound(Matrix, 3) ' Zwraca 20. Gorna = UBound(InnyMatrix) ' Zwraca 10.
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 29
Dialogowe okna komunikacyjne
Okno informacyjne - funkcja „MsgBox()”MsgBox(strKomunikat[, intPrzyciski] [, strNaglowek]
[, strZbiorPomocy, intNumerKontekstu])strKomunikat Wymagany. Łańcuch do 1024 znaków. Przechodzenie do
nowej linii Chr(13).Wprowadzenie pustej linii Chr(10).
intPrzyciski Nie wymagany. Suma wartości określających wyświetlane przyciski, typ wyświetlanej ikony, przycisk domyślny, modalność okna. Wartość domyślna wynosi „0”.
strNagłowek Nie wymagany. Łańcuch określający nazwę okna informacyjnego. Domyślnie jest to nazwa aplikacji.
strZbiorPomocy Nie wymagany. Łańcuch określający nazwę zbioru z pomocąpodręczną. Wymagany, gdy został określony intNumerKontekstu.
intNumerKontekstu Nie wymagany. Numer kontekstu pomocy podręcznej. Wymagany, gdy został wprowadzony strZbiorPomocy.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 30
Dialogowe okna komunikacyjne c.d.
Okno informacyjnePrzyciski wyświetlane w oknie informacyjnym:
Nazwa stałej Wartość Przyciski Polska wersjavbOKOnly 0 OK OK
OK, Anuluj
Przerwij, Ponów próbę, ZignorujTak, Nie, Anuluj
Tak, Nie
Ponów próbę, Anuluj
Pomoc
vbOKCancel 1 OK, Cancel
vbAbortRetryIgnore 2 Abort, Retry, Ignore
vbYesNoCancel 3 Yes, No, Cancel
vbYesNo 4 Yes, No
vbRetryCancel 5 Retry, Cancel
vbMsgBoxHelpButton 16384 Help
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 31
Dialogowe okna komunikacyjne c.d.
Okno informacyjneNazwa stałej Wartość Opis
Ikony wyświetlane w oknie komunikatu:vbCritical 16 Wyświetla ikonę zdarzenia krytycznego.
vbDefaultButton3 512 Trzeci przycisk jako domyślny.
324864
0
256
768
vbQuestion Wyświetla ikonę zapytania.vbExclamation Wyświetla ikonę wiadomości ostrzegawczej.vbInformation Wyświetla ikonę informacyjną.
Domyślne przyciski wyświetlane w oknie komunikatu:
vbDefaultButton1 Pierwszy przycisk jako domyślny.
vbDefaultButton2 Drugi przycisk jako domyślny.
vbDefaultButton4 Czwarty przycisk jako domyślny.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 32
Dialogowe okna komunikacyjne c.d.
Okno informacyjneNazwa stałej Wartość Opis
Modalność okna komunikatu:
vbApplicationModal 0 Okno modalne w aplikacji; działanie bieżącej aplikacji zostanie wstrzymane, dopóki użytkownik nie odpowie na wyświetlony komunikat.
vbSystemModal 4096 Okno modalne w systemie; działanie wszystkich aplikacji zostanie wstrzymane, dopóki użytkownik nie odpowie na wyświetlony komunikat.
Inne funkcje dotyczące wyświetlania okna i tekstu w oknie:
vbMsgBoxSetForeground 65536 Okno informacyjne na pierwszy plan.vbMsgBoxRight 524288 Polecenie dosunięcia tekstu do prawej strony.vbMsgBoxRtlReading 1048576 Odwrotne wprowadzanie tekstu do okna.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 33
Dialogowe okna komunikacyjne c.d.
Okno informacyjneWartości zwracane przez funkcję MsgBox():
Nazwa stałej Wartość OpisvbOK 1 Użytkownik wcisnął przycisk OK.
vbCancel 2 Użytkownik wcisnął przycisk Cancel (Anuluj).
vbAbort 3 Użytkownik wcisnął przycisk Abort (Przerwij).
vbRetry 4 Użytkownik wcisnął przycisk Retry (Ponów próbę).
vbIgnore 5 Użytkownik wcisnął przycisk Ignore (Zignoruj).
vbYes 6 Użytkownik wcisnął przycisk Yes (Tak).
vbNo 7 Użytkownik wcisnął przycisk No (Nie).
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 34
Dialogowe okna komunikacyjne c.d.
Okno informacyjnePrzykłady:Dim Info
MsgBox "Zostały wykonane niezbędne obliczenia."
Info = MsgBox("Początkowy tekst informacyjny."& _ Chr(13) & "Przechodzę do nowej linii.", _ vbDefaultButton2 + vbInformation + vbYesNoCancel + _vbMsgBoxHelpButton, "Nazwa próbnego okna")
Okno informacyjnePrzykłady:Dim Info
MsgBox "Zostały wykonane niezbędne obliczenia."
Info = MsgBox("Początkowy tekst informacyjny."& _ Chr(13) & "Przechodzę do nowej linii.", _ vbDefaultButton2 + vbInformation + vbYesNoCancel + _vbMsgBoxHelpButton, "Nazwa próbnego okna")
Kod
P
P1
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 35
Dialogowe okna komunikacyjne c.d.
Okno informacyjne
Przykład - decyzyjne zamknięcie okna informacyjnego:Dim Msg, Style, Title, Help, Ctxt, Resp, MyStr
Msg = "Czy chcesz kontynuować ?"Style = vbYesNo + vbCritical + vbDefaultButton2 Title = "Prezentacja okna"Help = "DEMO.HLP"Ctxt = 1000
Resp = MsgBox(Msg, Style, Title, Help, Ctxt)If Resp = vbYes Then
MyStr = "Tak" Else
MyStr = "Nie" End If
MsgBox MyStr
Okno informacyjne
Przykład - decyzyjne zamknięcie okna informacyjnego:Dim Msg, Style, Title, Help, Ctxt, Resp, MyStr
Msg = "Czy chcesz kontynuować ?"Style = vbYesNo + vbCritical + vbDefaultButton2 Title = "Prezentacja okna"Help = "DEMO.HLP"Ctxt = 1000
Resp = MsgBox(Msg, Style, Title, Help, Ctxt)If Resp = vbYes Then
MyStr = "Tak" Else
MyStr = "Nie" End If
MsgBox MyStr
Kod
P
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 36
Dialogowe okna komunikacyjne c.d.
Okno wprowadzania danych – funkcja „InputBox()”strZmienna = InputBox( strPytanie [, strTytul] [,strDomyslne]
[,intXpoz] [,intYpoz] [, strPomoc, intKontekst])strPytanie Argument obowiązkowy typu String określający komunikat
umieszczany w oknie.strTytul Parametr opcjonalny typu String określający tytuł okna komunikatu.strDomyslne Parametr opcjonalny typu String określający domyślną wartość
wyświetlaną w polu tekstowym okna. intXpoz Parametr opcjonalny typu Integer określający pozycję okna , w
twipsach, w formularzu od lewego brzegu okna.intYpoz Parametr opcjonalny typu Integer określający pozycję okienka, w
twipsach, w formularzu od górnego brzegu okna.
strPomoc Parametr opcjonalny typu String określający zbiór pomocy.
intKontekst Parametr opcjonalny typu Integer określający kontekst pomocy.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 37
Dialogowe okna komunikacyjne c.d.
Okno wprowadzania danychWartości zwracane przez funkcję „InputBox()”:
Akcja OpisWybór przycisku „OK” Zwracana jest wartość typu String wpisana przez
użytkownika do pola tekstowego lub zaakceptowana wartość domyślna.
Wybór przycisku „Anuluj” Zwracana jest wartość typu String w postaci pustego łańcucha ””.
Przykład:Dim a, b, c As Integera = InputBox("Podaj liczbę a: ")b = InputBox("Podaj liczbę b: ")c = a - (-b)
MsgBox "Suma podanych liczb: " & c
Kod
P
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 38
Dialogowe okna komunikacyjne c.d.
Okno wprowadzania danychPrzykłady:Dim Message, Title, Def, War
Message = "Wprowadź wartość między 1 a 3" 'Komunikat.Title = "Wprowadzanie danych" 'Nazwa okna.Def = "1" ' Wartość bieżąca.
War = InputBox(Message, Title, Def)'Zastosowanie pomocy. Pojawienie się przycisku Pomoc.
War = InputBox(Message, Title, Def, , ,"DEMO.HLP", 10)‘Wyświetlenie okna w pozycji 100, 100.
War = InputBox(Message, Title, Def, 100, 100)
Okno wprowadzania danychPrzykłady:Dim Message, Title, Def, War
Message = "Wprowadź wartość między 1 a 3" 'Komunikat.Title = "Wprowadzanie danych" 'Nazwa okna.Def = "1" ' Wartość bieżąca.
War = InputBox(Message, Title, Def)'Zastosowanie pomocy. Pojawienie się przycisku Pomoc.
War = InputBox(Message, Title, Def, , ,"DEMO.HLP", 10)‘Wyświetlenie okna w pozycji 100, 100.
War = InputBox(Message, Title, Def, 100, 100)
Kod
P
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 39
Funkcje i podprogramy (procedury)
Typy procedur:1. Podprogram – deklarowana za pomocą słowa kluczowego Sub.
Może być uruchamiana samodzielnie. Można z jej wnętrza uruchamiać inne procedury.
2. Funkcja – deklarowana za pomocą słowa kluczowego Function. Zwraca wartość do procedury przez którą została wywołana.
3. Procedura zdarzenia – deklarowana za pomocą słowa kluczowego Event. Uruchamiana najczęściej poprzez inicjowanie zdarzenia pochodzącego z obiektu wizualnego – formularza.
4. Procedura właściwości – deklarowana za pomocą słowa kluczowego Property. Stosowana przy odczytywaniu lub modyfikowaniu wartości właściwości.
5. Makro – podprogram bez parametrów najczęściej uruchamiany bezpośrednio z aplikacji. Można go wywołać z parametrami z poziomu innej procedury.
Typy procedur:1. Podprogram – deklarowana za pomocą słowa kluczowego Sub.
Może być uruchamiana samodzielnie. Można z jej wnętrza uruchamiać inne procedury.
2. Funkcja – deklarowana za pomocą słowa kluczowego Function. Zwraca wartość do procedury przez którą została wywołana.
3. Procedura zdarzenia – deklarowana za pomocą słowa kluczowego Event. Uruchamiana najczęściej poprzez inicjowanie zdarzenia pochodzącego z obiektu wizualnego – formularza.
4. Procedura właściwości – deklarowana za pomocą słowa kluczowego Property. Stosowana przy odczytywaniu lub modyfikowaniu wartości właściwości.
5. Makro – podprogram bez parametrów najczęściej uruchamiany bezpośrednio z aplikacji. Można go wywołać z parametrami z poziomu innej procedury.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 40
Deklaracja funkcji
Deklaracja i składnia funkcji:
[Public | Private] [Static] Function Nazwa [(ListaArgumentów)] [As TypZwracany][instrukcje][Nazwa = wyrażenie][Exit Function]
[instrukcje][Nazwa = wyrażenie]
End Function
Deklaracja i składnia funkcji:
[Public | Private] [Static] Function Nazwa [(ListaArgumentów)] [As TypZwracany][instrukcje][Nazwa = wyrażenie][Exit Function]
[instrukcje][Nazwa = wyrażenie]
End Function
Przestrzeńładunkowa funkcji
(wnętrze)
Deklaracja zasięgu działania funkcji
Miejsce wprowadzania danych do funkcji
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 41
Składnia listy argumentów funkcji
[Optional] [ByVal | ByRef] [ParamArray] NazwaZmiennej [( )] [As Typ] [= WarDomyślna]
Optional Element nieobowiązkowy. Wskazuje, że argument nie jest wymagany.
ByVal Element nieobowiązkowy. Wskazuje, że argument przekazywany jest przez wartość podaną w trakcie wywołania funkcji.
ByRef Element nieobowiązkowy. Wskazuje, że argument przekazywany jest przez odwołanie do ostatnio przypisanej wartości. W języku Visual Basic ByRef jest ustawieniem domyślnym.
ParamArray Element nieobowiązkowy. Stosowany tylko jako ostatni argument na liście argumentów. Wskazuje, że ostatnim argumentem jest opcjonalna tablica z elementami typu Variant.
NazwaZmiennej Element obowiązkowy. Nazwa różna od wbudowanych.
WarDomyślna Element nieobowiązkowy. Stała lub konkretna wartość.Typ Element nieobowiązkowy. Dowolny typ danych.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 42
Funkcje – przykłady deklaracji
Function Pierwiastek(Argument As Double) _
As Double If Argument < 0 Then 'Sprawdzanie argumentu.
MsgBox "Podaj dodatnią wartość." Exit Function 'Wyjście z funkcji.
ElsePierwiastek = Sqr(Argument)
'Zwraca wartość.End If
End Function
Function Pierwiastek(Argument As Double) _
As Double If Argument < 0 Then 'Sprawdzanie argumentu.
MsgBox "Podaj dodatnią wartość." Exit Function 'Wyjście z funkcji.
ElsePierwiastek = Sqr(Argument)
'Zwraca wartość.End If
End Function
Kod
P
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 43
Funkcje – przykłady deklaracji i wywołań
Function Obliczenia(ByVal Arg1 As Integer, _ParamArray ArgN())
Dim Wartosc‘Wywołanie funkcji jak poniżej:
Wartosc = Obliczenia(4, 3 ,2 ,1) ‘ Lokalne zmienne otrzymały wartości:‘ Arg1 = 4, ‘ ArgN(0) = 3, ArgN(1) = 2, ArgN(2) = 1
Function Obliczenia(ByVal Arg1 As Integer, _ParamArray ArgN())
Dim Wartosc‘Wywołanie funkcji jak poniżej:
Wartosc = Obliczenia(4, 3 ,2 ,1) ‘ Lokalne zmienne otrzymały wartości:‘ Arg1 = 4, ‘ ArgN(0) = 3, ArgN(1) = 2, ArgN(2) = 1
KodDeklaracja funkcji
Wywołanie funkcji poprzez przypisanie
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 44
Funkcje – przykłady deklaracji i wywołań c.d.
Public Function Srednia(ByVal Arg1 As _Integer, ParamArray ArgN())
Dim i As IntegerSrednia = 0
For i = 0 To Arg1 - 1Srednia = Srednia + ArgN(i)
Next iSrednia = Srednia / Arg1
End FunctionSub Wykonaj()
MsgBox Srednia(6, 2, 4, 3, 6, 7, 8)End Sub
Public Function Srednia(ByVal Arg1 As _Integer, ParamArray ArgN())
Dim i As IntegerSrednia = 0
For i = 0 To Arg1 - 1Srednia = Srednia + ArgN(i)
Next iSrednia = Srednia / Arg1
End FunctionSub Wykonaj()
MsgBox Srednia(6, 2, 4, 3, 6, 7, 8)End Sub
Kod
P
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 45
Funkcje – przykłady deklaracji i wywołań c.d.
Function Funkcja(MyStr As String, Optional _Arg1 As Integer = 5, Optional Arg2 _= "Zofia")
Dim RetVal‘Funkcja może być wywołana następująco:
RetVal = Funkcja("Cześć", 2, "Słowo") ‘Wszystkie trzy argumenty dostarczone.
RetVal = Funkcja("Test", , 5) ‘Ominięty drugi argument.
RetVal = Funkcja(MyStr:="Cześć", Arg1:=7)‘Pierwszy i drugi argument wywołany‘według nazwy.
Function Funkcja(MyStr As String, Optional _Arg1 As Integer = 5, Optional Arg2 _= "Zofia")
Dim RetVal‘Funkcja może być wywołana następująco:
RetVal = Funkcja("Cześć", 2, "Słowo") ‘Wszystkie trzy argumenty dostarczone.
RetVal = Funkcja("Test", , 5) ‘Ominięty drugi argument.
RetVal = Funkcja(MyStr:="Cześć", Arg1:=7)‘Pierwszy i drugi argument wywołany‘według nazwy.
Kod
Deklaracja funkcji
Wywołanie funkcji poprzez przypisanie
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 46
Deklaracja procedury
Deklaracja i składnia procedury:
[Public | Private | Friend] [Static] Sub Nazwa [(ListaArgumentów)][instrukcje][Nazwa = wyrażenie][Exit Sub]
[instrukcje][Nazwa = wyrażenie]
End Sub
Deklaracja i składnia procedury:
[Public | Private | Friend] [Static] Sub Nazwa [(ListaArgumentów)][instrukcje][Nazwa = wyrażenie][Exit Sub]
[instrukcje][Nazwa = wyrażenie]
End Sub
Przestrzeń ładunkowa procedury (wnętrze)
Deklaracja zasięgu działania procedury
Miejsce wprowadzania danych do procedury
Friend – deklaracja podobna do słowa kluczowego Public; stosowana wyłącznie w module klasy; procedura widoczna w całym projekcie, poza kontrolerem obiektów.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 47
Składnia listy argumentów procedury
[Optional] [ByVal | ByRef] [ParamArray] NazwaZmiennej [( )] [As Typ] [= WarDomyślna]
Optional Element nieobowiązkowy. Wskazuje, że argument nie jest wymagany.
ByVal Element nieobowiązkowy. Wskazuje, że argument przekazywany jest przez wartość podaną w trakcie wywołania procedury.
ByRef Element nieobowiązkowy. Wskazuje, że argument przekazywany jest przez odwołanie do ostatnio przypisanej wartości. W języku Visual Basic ByRef jest ustawieniem domyślnym.
ParamArray Element nieobowiązkowy. Stosowany tylko jako ostatni argument na liście argumentów. Wskazuje, że ostatnim argumentem jest opcjonalna tablica z elementami typu Variant.
NazwaZmiennej Element obowiązkowy. Nazwa różna od wbudowanych.
WarDomyślna Element nieobowiązkowy. Stała lub konkretna wartość.Typ Element nieobowiązkowy. Dowolny typ danych.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 48
Procedura – przykład deklaracji
Sub ObliczPole(Dlugosc, Szerokosc, Okno) 'Deklaracja zmiennej lokalnej
Dim Pole As Double. If Dlugosc = 0 Or Szerokosc = 0 Then
'Jeżeli któryś z argumentów jest równy 0,Exit Sub 'opuść natychmiast procedurę.
End If'Oblicz pole prostokąta.
Pole = Dlugosc * Szerokosc'Wypisz wartość Pole w oknie MsgBox.
If Okno = True Then MsgBox PoleEnd Sub
Sub ObliczPole(Dlugosc, Szerokosc, Okno) 'Deklaracja zmiennej lokalnej
Dim Pole As Double. If Dlugosc = 0 Or Szerokosc = 0 Then
'Jeżeli któryś z argumentów jest równy 0,Exit Sub 'opuść natychmiast procedurę.
End If'Oblicz pole prostokąta.
Pole = Dlugosc * Szerokosc'Wypisz wartość Pole w oknie MsgBox.
If Okno = True Then MsgBox PoleEnd Sub
Kod
P
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 49
Procedura – przykłady wywołań
Private Sub PodajParametry()
Dim x As Single, y As Single, z As Booleanx = 10: y = 30: z = True
Call ObliczPole(x, y, z)End Sub
Public Sub PodajParametry()Dim x As Single, y As Single, z As Boolean
x = 10: y = 60: z = TrueObliczPole Dlugosc:=x, Szerokosc:= y, Okno:=z
End Sub
Private Sub PodajParametry()
Dim x As Single, y As Single, z As Booleanx = 10: y = 30: z = True
Call ObliczPole(x, y, z)End Sub
Public Sub PodajParametry()Dim x As Single, y As Single, z As Boolean
x = 10: y = 60: z = TrueObliczPole Dlugosc:=x, Szerokosc:= y, Okno:=z
End Sub
Kod
P
P1
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 50
Wbudowane instrukcje, funkcje i metody
Zestawy instrukcji, funkcji i metod można podzielić na:1. Formatujące dane (np. Format – formatowanie danych według
zadanego wzorca; możliwość tworzenia własnego wzorca).2. Konwertujące typy danych (możliwość kontrolowania typów
danych i tworzenia przejrzystego oraz czytelnego kodu).3. Manipulujące łańcuchami znaków (obcinanie, wydzielanie
fragmentów, filtrowanie łańcuchów znaków).4. Manipulujące datami i godzinami (wyodrębnianie składników,
wykonywanie operacji matematycznych).5. Umożliwiające komunikację z użytkownikiem (Funkcje MsgBox
oraz InputBox – wizualny sposób wyświetlania komunikatów oraz pobierania danych od użytkownika).
6. Matematyczne, finansowe i logiczne.7. Wykonujące operacje wejścia oraz wyjścia.
Zestawy instrukcji, funkcji i metod można podzielić na:1. Formatujące dane (np. Format – formatowanie danych według
zadanego wzorca; możliwość tworzenia własnego wzorca).2. Konwertujące typy danych (możliwość kontrolowania typów
danych i tworzenia przejrzystego oraz czytelnego kodu).3. Manipulujące łańcuchami znaków (obcinanie, wydzielanie
fragmentów, filtrowanie łańcuchów znaków).4. Manipulujące datami i godzinami (wyodrębnianie składników,
wykonywanie operacji matematycznych).5. Umożliwiające komunikację z użytkownikiem (Funkcje MsgBox
oraz InputBox – wizualny sposób wyświetlania komunikatów oraz pobierania danych od użytkownika).
6. Matematyczne, finansowe i logiczne.7. Wykonujące operacje wejścia oraz wyjścia.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 51
Składnia instrukcji warunkowej (If)
Instrukcja warunkowa: If ... Then ... Else ... End If1. If warunek Then [instrukcje] Przykład:
If d > 200 Then c = d + 2
2. If warunek Then instrukcje Else instrukcjePrzykład:
If d > 200 Then c = d + 2 Else c = d - 62 3. If warunek1 Then
instrukcje[ElseIf warunek2 Then
instrukcje][Else
instrukcje]End If
Instrukcja warunkowa: If ... Then ... Else ... End If1. If warunek Then [instrukcje] Przykład:
If d > 200 Then c = d + 2
2. If warunek Then instrukcje Else instrukcjePrzykład:
If d > 200 Then c = d + 2 Else c = d - 62 3. If warunek1 Then
instrukcje[ElseIf warunek2 Then
instrukcje][Else
instrukcje]End If
Kod
Kod
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 52
Składnia instrukcji warunkowej (If) c.d.
Przykład:
Private Sub Warunek(Num As Long, _
Optional Cyfry As Long)If Num < 10 Then ‘Pierwszy warunek
Cyfry = 1ElseIf Num < 100 Then ‘Drugi warunek
Cyfry = 2Else ‘Pozostałe przypadki
Cyfry = 3End If
MsgBox "Jest to wartość " &Cyfry& " cyfrowa."End Sub
Przykład:
Private Sub Warunek(Num As Long, _
Optional Cyfry As Long)If Num < 10 Then ‘Pierwszy warunek
Cyfry = 1ElseIf Num < 100 Then ‘Drugi warunek
Cyfry = 2Else ‘Pozostałe przypadki
Cyfry = 3End If
MsgBox "Jest to wartość " &Cyfry& " cyfrowa."End Sub
Kod
P
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 53
Instrukcja warunkowa (Select Case)
Instrukcja: Select Case ... End SelectSkładnia:
Select Case WyrażenieTest[Case lista_wyrażeń_n
[instrukcje_n]] ...[Case Else
[instrukcje_else]]End Select
Przykład:Select Case NumCase 1 To 5MsgBox "Przedział od 1 do 5"Case 6, 7, 8MsgBox "Przedział od 6 do 8"Case 9 To 10MsgBox "Przedział od 9 do 10"Case Is > 10MsgBox "Wartość większa od 10."Case ElseMsgBox "Poza przedziałem" & _
" liczb dodatnich."End Select
Kod
P
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 54
Instrukcja warunkowa (While)
Instrukcja warunkowa: While...Wend Wykonuje ciąg instrukcji, dopóki warunek posiada wartość True.
Składnia:While warunek
[instrukcje]WendPrzykład:Private Sub Iter(n,Licz As Long, Licz1 As Long)Dim Licz2 As LongWhile Licz < Licz1Licz = Licz + n: Licz2 = Licz2 + 1
WendMsgBox "Liczba iteracji wynosi: " & Licz2
End Sub
Instrukcja warunkowa: While...Wend Wykonuje ciąg instrukcji, dopóki warunek posiada wartość True.
Składnia:While warunek
[instrukcje]WendPrzykład:Private Sub Iter(n,Licz As Long, Licz1 As Long)Dim Licz2 As LongWhile Licz < Licz1Licz = Licz + n: Licz2 = Licz2 + 1
WendMsgBox "Liczba iteracji wynosi: " & Licz2
End Sub
Punkt zapętlenia (While end)
Warunkowy początek pętli
Kod
P
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 55
Iteracyjna instrukcja (For)
Składnia:For licznik = poczatek To koniec [Step krok]
[instrukcje][Exit For]
[instrukcje]Next [licznik]Przykład:Dim Slowo, Znak, CiagFor Slowo = 10 To 1 Step -1 'Wykonaj 10 powtórzeń.
For Znak = 0 To 9 'Wykonaj 10 powtórzeń.Ciag = Ciag & Znak 'Dołącz cyfrę do ciągu.
Next Znak 'Zwiększ licznik.Ciag = Ciag & " " 'Dołącz znak spacji.
Next Slowo
Składnia:For licznik = poczatek To koniec [Step krok]
[instrukcje][Exit For]
[instrukcje]Next [licznik]Przykład:Dim Slowo, Znak, CiagFor Slowo = 10 To 1 Step -1 'Wykonaj 10 powtórzeń.
For Znak = 0 To 9 'Wykonaj 10 powtórzeń.Ciag = Ciag & Znak 'Dołącz cyfrę do ciągu.
Next Znak 'Zwiększ licznik.Ciag = Ciag & " " 'Dołącz znak spacji.
Next Slowo
Kod
- liczba iteracji1koniec poczatekkrok−
+
P
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 56
Iteracyjna instrukcja (For) c.d.
Składnia:For Each element In grupa
[instrukcje][Exit For]
[instrukcje]Next [element]Przykład:Dim Istnieje, MojObiekt, MojaKolekcja
Istnieje = FalseFor Each MojObiekt In MojaKolekcja
If MojObiekt.Text = "Egzamin" ThenIstnieje = TrueExit For
End IfNext
Składnia:For Each element In grupa
[instrukcje][Exit For]
[instrukcje]Next [element]Przykład:Dim Istnieje, MojObiekt, MojaKolekcja
Istnieje = FalseFor Each MojObiekt In MojaKolekcja
If MojObiekt.Text = "Egzamin" ThenIstnieje = TrueExit For
End IfNext
Kod
Dynamiczne określenie liczby iteracji
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 57
Instrukcja pętli logicznej (Do ... Loop)
Składnia:Do [{While | Until} warunek]
[instrukcje][Exit Do]
[instrukcje]Loop
Składnia alternatywna:
Do[instrukcje]
[Exit Do][instrukcje]
Loop [{While | Until} warunek]
Powtarza blok instrukcji tak długo, jak długo warunek posiada wartość True.
Powtarza blok instrukcji tak długo, jak długo warunek posiada wartość False.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 58
Instrukcja pętli logicznej (Do ... Loop) c.d.
Przykład:
Dim Flaga, LicznikFlaga = True: Licznik = 0Do 'Zewnętrzna pętla.Do While Licznik < 20 'Wewnętrzna pętla.
Licznik = Licznik + 1 'Zwiększaj licznik.If Licznik = 10 ThenFlaga = False
Exit Do 'Wyjdź z wewnętrznej pętli.End If
LoopLoop Until (Flaga = False)
‘Wyjdź z zewnętrznej pętli.
Przykład:
Dim Flaga, LicznikFlaga = True: Licznik = 0Do 'Zewnętrzna pętla.Do While Licznik < 20 'Wewnętrzna pętla.
Licznik = Licznik + 1 'Zwiększaj licznik.If Licznik = 10 ThenFlaga = False
Exit Do 'Wyjdź z wewnętrznej pętli.End If
LoopLoop Until (Flaga = False)
‘Wyjdź z zewnętrznej pętli.
Kod
P
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 59
Instrukcja pętli logicznej (Do ... Loop) c.d.
Przykład (bez zastosowania słów kluczowych „While lub Until”):Public Sub TestDanych()Dim Odpowiedz As String
Odpowiedz = InputBox("Wpisz literę (A-E)")DoIf Odpowiedz = "" ThenOdpowiedz = InputBox("Nic nie wpisałeś. " & _
"Wpisz literę A, B, C, D lub E.")ElseIf Len(Odpowiedz) > 1 ThenOdpowiedz = InputBox("Wpisz tylko jedną literę.")ElseIf Odpowiedz < "A" Or Odpowiedz > "E" ThenOdpowiedz = InputBox("Nieprawidłowa litera. " & _
"Wpisz literę A, B, C, D lub E.")Else
MsgBox "Dziękuję. Dane zostały przyjęte"Exit Do
End IfLoop
End Sub
Przykład (bez zastosowania słów kluczowych „While lub Until”):Public Sub TestDanych()Dim Odpowiedz As String
Odpowiedz = InputBox("Wpisz literę (A-E)")DoIf Odpowiedz = "" ThenOdpowiedz = InputBox("Nic nie wpisałeś. " & _
"Wpisz literę A, B, C, D lub E.")ElseIf Len(Odpowiedz) > 1 ThenOdpowiedz = InputBox("Wpisz tylko jedną literę.")ElseIf Odpowiedz < "A" Or Odpowiedz > "E" ThenOdpowiedz = InputBox("Nieprawidłowa litera. " & _
"Wpisz literę A, B, C, D lub E.")Else
MsgBox "Dziękuję. Dane zostały przyjęte"Exit Do
End IfLoop
End Sub
Kod
P
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 60
Instrukcja skoku do etykiety (GoTo)
Składnia:
Goto etykietaPodstawowe zasady w stosowaniu instrukcji GoTo:1. Wyrażenie będące etykietą musi występować jako pierwsze w
wierszu i nie może być poprzedzane znakami odstępów lub tabulacji.
2. Etykieta musi być zakończona dwukropkiem.3. Etykieta musi rozpoczynać się od litery, lecz w jej tekście mogą
występować cyfry - razem do 40 znaków nie licząc dwukropka.4. Dla zgodności ze starszymi wersjami języka dopuszczone jest
stosowanie jako etykiety numeru wiersza programu. W tym przypadku nie jest konieczne stawianie za etykietą dwukropka.
Składnia:
Goto etykietaPodstawowe zasady w stosowaniu instrukcji GoTo:1. Wyrażenie będące etykietą musi występować jako pierwsze w
wierszu i nie może być poprzedzane znakami odstępów lub tabulacji.
2. Etykieta musi być zakończona dwukropkiem.3. Etykieta musi rozpoczynać się od litery, lecz w jej tekście mogą
występować cyfry - razem do 40 znaków nie licząc dwukropka.4. Dla zgodności ze starszymi wersjami języka dopuszczone jest
stosowanie jako etykiety numeru wiersza programu. W tym przypadku nie jest konieczne stawianie za etykietą dwukropka.
Uwaga ! Częste stosowanie nie jest wskazane.
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 61
Przykład zastosowania instrukcji (GoTo)
Przykład:Public Sub SkokDoEtykiety()Dim Wartosc
Wartosc = InputBox("Podaj liczbę specjalną.")If Wartosc = "" Then
MsgBox "Brak danych."Exit Sub
End IfSelect Case WartoscCase 2100
GoTo WartoscSpecjalnaCase Is < 1000
MsgBox "Wartość mniejsza niż 1000"Case Is >= 1000
MsgBox "Wartość większa lub równa 1000"End Select
Exit SubWartoscSpecjalna:
MsgBox "Podano wartość specjalną."End Sub
Przykład:Public Sub SkokDoEtykiety()Dim Wartosc
Wartosc = InputBox("Podaj liczbę specjalną.")If Wartosc = "" Then
MsgBox "Brak danych."Exit Sub
End IfSelect Case WartoscCase 2100
GoTo WartoscSpecjalnaCase Is < 1000
MsgBox "Wartość mniejsza niż 1000"Case Is >= 1000
MsgBox "Wartość większa lub równa 1000"End Select
Exit SubWartoscSpecjalna:
MsgBox "Podano wartość specjalną."End Sub
Kod
P
Kod VBA - PodstawyVisual Basic dla Aplikacji© Ζ.Ζ. 62
Przykład zastosowania instrukcji (GoTo) c.d.
Przykład:Sub GoToDemo(Numer) Dim MyStringIf Numer = 1 Then GoTo Line1 Else GoTo Line2
‘==== Początek sekcji etykiet ======Line1:
MyString = "Podałeś liczbę o wartości 1." GoTo Line3
Line2:MyString = "Podałeś liczbę o wartości 2."
Line3: MsgBox MyString
End Sub
Przykład:Sub GoToDemo(Numer) Dim MyStringIf Numer = 1 Then GoTo Line1 Else GoTo Line2
‘==== Początek sekcji etykiet ======Line1:
MyString = "Podałeś liczbę o wartości 1." GoTo Line3
Line2:MyString = "Podałeś liczbę o wartości 2."
Line3: MsgBox MyString
End Sub
Kod
P