Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
1
Visual Basic dla Aplikacji
Visual Basic dla Aplikacji
Visual Basic dla Aplikacji
Kod Visual Basic - Podstawy
Kod Visual Basic
Kod Visual Basic
-
-
Podstawy
Podstawy
Wyk
Wyk
ł
ł
ad
ad
dr in
dr in
ż
ż
. Zbigniew Zakrzewski
. Zbigniew Zakrzewski
v. 1.2.2
v. 1.2.2
Kod VBA - Podstawy
Visual 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 - Podstawy
Visual 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 - Podstawy
Visual 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 - Podstawy
Visual 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ętli
x1 = x1 +1
If
x1 = x2 Then
‘
Początek warunku
x1 = 5
‘ Podprogram warunku spełnionego
x2 = 10
Else
‘ W innym przypadku
x1 = x2
‘ Podprogram dla warunku
x3 = 20
‘ niespełnionego
End If
Loop
‘ 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ętli
x1 = x1 +1
If
x1 = x2 Then
‘
Początek warunku
x1 = 5
‘ Podprogram warunku spełnionego
x2 = 10
Else
‘ W innym przypadku
x1 = x2
‘ Podprogram dla warunku
x3 = 20
‘ niespełnionego
End If
Loop
‘ Koniec pętli
Kod
Kod VBA - Podstawy
Visual 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 zmiennych
x = 10
‘
Przypisanie wartości zmiennej x
y = 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 zmiennych
x = 10
‘
Przypisanie wartości zmiennej x
y = 20
‘
Przypisanie wartośći zmiennej y
End Sub
‘
Zakończenie kodu procedury
Kod
Kod
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
7
Typy danych
Typ
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-45
dla 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 - Podstawy
Visual 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)
+/-79228162514264337593543950335
bez 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 - Podstawy
Visual 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
65400
znakó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 - Podstawy
Visual 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
Dynamiczna
Statyczna
Przykłady:
Dim
x1 As Integer, x2 As Integer
Dim
z2 As Double
Dim
tekst1 As string*56
Static
tekst2 As string
Kod
Kod VBA - Podstawy
Visual 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 lokalna
Dim
Komunikat As String ‘Deklaracja lokalna
Public
Licznik As Long
‘Deklaracja
‘globalna
Static
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 lokalna
Dim
Komunikat As String ‘Deklaracja lokalna
Public
Licznik As Long
‘Deklaracja
‘globalna
Static
Numer As Integer ‘Deklaracja lokalna
Kod
Kod VBA - Podstawy
Visual 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 - Podstawy
Visual 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 - Podstawy
Visual 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 = True
Const
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 = True
Const
Poniedziałek = 1, Wtorek = 2
Kod
Kod VBA - Podstawy
Visual 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 - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
16
Definiowanie niestandardowego typu danych
[Private | Public] Type nazwa_typu
nazwa_elementu [([indeksy])] As typ
[nazwa_elementu[([indeksy])] As typ]
. . .
End Type
Public
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 To
indeks_górny]
typ
Element obowiązkowy. Dowolnego rodzaju z wcześniejszej tabeli.
Kod VBA - Podstawy
Visual 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, TypDanych
WszystkieDane = 3
WszystkieDane = ”Dobrze”
WszystkieDane = #1/10/1998 19:05:21#
‘ Zapytanie o typ bieżącej wartości
TypDanych = 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, TypDanych
WszystkieDane = 3
WszystkieDane = ”Dobrze”
WszystkieDane = #1/10/1998 19:05:21#
‘ Zapytanie o typ bieżącej wartości
TypDanych = TypeName(WszystkieDane) ‘ Date
Kod
Kod VBA - Podstawy
Visual 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 - Podstawy
Visual 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 - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
20
Przykłady zastosowań operatora „Like”
Dim
MojWynik
MojWynik = "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
MojWynik
MojWynik = "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 - Podstawy
Visual 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 - Podstawy
Visual 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 - Podstawy
Visual 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 - Podstawy
Visual 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 - Podstawy
Visual 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 statyczne
Dim NazwaTablicy(n) As TypDanych
Dim NazwaTablicy(n,m,p,...) As TypDanych
Dim NazwaTablicy(n1 To n2,m1 To m2,p1 To p2, ...) As TypDanych
Tablice dynamiczne
Dim nazwatablicy() As TypDanych
Do 60 wymiarów
Option Base 1
Dim
miesiace(11) As String
Public
wyniki(10, 10, 2) As Byte
Static
dane(1 To 5, 6 To 10) As Double
Private
wartosci() ‘Tablica dynamiczna zmiennych Variant
Kod
Kod VBA - Podstawy
Visual 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 - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
27
Redeklaracja tablic dynamicznych c.d.
Przykład:
Option Base 1
Dim
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 1
Dim
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
Tab
Tab
Tab
Tab
Tab
Tab
Tab
Tab
Tab
⎡
⎤
⎢
⎥
⎢
⎥
⎢
⎥
⎣
⎦
11
12
13
14
15
21
22
23
24
25
31
32
33
34
35
Tab
Tab
Tab
Tab
Tab
Tab
Tab
Tab
Tab
Tab
Tab
Tab
Tab
Tab
Tab
⎡
⎤
⎢
⎥
⎢
⎥
⎢
⎥
⎣
⎦
Nowe elementy tablicy (macierzy)
Nienaruszona część tablicy (macierzy)
Kod
Kod VBA - Podstawy
Visual 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 1
Dim
Dolna, Gorna
Dim
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 1
Dim
Dolna, Gorna
Dim
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 - Podstawy
Visual 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 - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
30
Dialogowe okna komunikacyjne c.d.
Okno informacyjne
Przyciski wyświetlane w oknie informacyjnym:
Nazwa stałej
Wartość
Przyciski
Polska wersja
vbOKOnly
0
OK
OK
OK, Anuluj
Przerwij, Ponów próbę,
Zignoruj
Tak, 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 - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
31
Dialogowe okna komunikacyjne c.d.
Okno informacyjne
Nazwa stałej
Wartość
Opis
Ikony wyświetlane w oknie komunikatu:
vbCritical
16
Wyświetla ikonę zdarzenia krytycznego.
vbDefaultButton3
512
Trzeci przycisk jako domyślny.
32
48
64
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 - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
32
Dialogowe okna komunikacyjne c.d.
Okno informacyjne
Nazwa 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 - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
33
Dialogowe okna komunikacyjne c.d.
Okno informacyjne
Wartości zwracane przez funkcję MsgBox():
Nazwa stałej
Wartość
Opis
vbOK
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 - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
34
Dialogowe okna komunikacyjne c.d.
Okno informacyjne
Przykł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 informacyjne
Przykł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 - Podstawy
Visual 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 - Podstawy
Visual 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 - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
37
Dialogowe okna komunikacyjne c.d.
Okno wprowadzania danych
Wartości zwracane przez funkcję „InputBox()”:
Akcja
Opis
Wybó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 Integer
a = InputBox("Podaj liczbę a: ")
b = InputBox("Podaj liczbę b: ")
c = a - (-b)
MsgBox
"Suma podanych liczb: " & c
Kod
P
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
38
Dialogowe okna komunikacyjne c.d.
Okno wprowadzania danych
Przykł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 danych
Przykł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 - Podstawy
Visual 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 - Podstawy
Visual 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 - Podstawy
Visual 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 - Podstawy
Visual 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.
Else
Pierwiastek = 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.
Else
Pierwiastek = Sqr(Argument)
'Zwraca wartość.
End If
End Function
Kod
P
Kod VBA - Podstawy
Visual 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
Kod
Deklaracja funkcji
Wywołanie funkcji poprzez przypisanie
Kod VBA - Podstawy
Visual 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 Integer
Srednia = 0
For
i = 0 To Arg1 - 1
Srednia = Srednia + ArgN(i)
Next
i
Srednia = Srednia / Arg1
End Function
Sub
Wykonaj()
MsgBox
Srednia(6, 2, 4, 3, 6, 7, 8)
End Sub
Public Function
Srednia(ByVal Arg1 As _
Integer, ParamArray ArgN())
Dim
i As Integer
Srednia = 0
For
i = 0 To Arg1 - 1
Srednia = Srednia + ArgN(i)
Next
i
Srednia = Srednia / Arg1
End Function
Sub
Wykonaj()
MsgBox
Srednia(6, 2, 4, 3, 6, 7, 8)
End Sub
Kod
P
Kod VBA - Podstawy
Visual 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 - Podstawy
Visual 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 - Podstawy
Visual 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 - Podstawy
Visual 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 Pole
End 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 Pole
End Sub
Kod
P
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
49
Procedura – przykłady wywołań
Private Sub
PodajParametry()
Dim
x As Single, y As Single, z As Boolean
x = 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 = True
ObliczPole Dlugosc:=x, Szerokosc:= y, Okno:=z
End Sub
Private Sub
PodajParametry()
Dim
x As Single, y As Single, z As Boolean
x = 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 = True
ObliczPole Dlugosc:=x, Szerokosc:= y, Okno:=z
End Sub
Kod
P
P1
Kod VBA - Podstawy
Visual 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 - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
51
Składnia instrukcji warunkowej (If)
Instrukcja warunkowa: If ... Then ... Else ... End If
1. If warunek Then [instrukcje]
Przykład:
If
d > 200 Then c = d + 2
2. If warunek Then instrukcje Else instrukcje
Przykł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 If
1. If warunek Then [instrukcje]
Przykład:
If
d > 200 Then c = d + 2
2. If warunek Then instrukcje Else instrukcje
Przykł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 - Podstawy
Visual 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 = 1
ElseIf
Num < 100 Then
‘Drugi warunek
Cyfry = 2
Else
‘Pozostałe przypadki
Cyfry = 3
End 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 = 1
ElseIf
Num < 100 Then
‘Drugi warunek
Cyfry = 2
Else
‘Pozostałe przypadki
Cyfry = 3
End If
MsgBox
"Jest to wartość " &Cyfry& " cyfrowa."
End Sub
Kod
P
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
53
Instrukcja warunkowa (Select Case)
Instrukcja: Select Case ... End Select
Składnia:
Select Case WyrażenieTest
[Case lista_wyrażeń_n
[instrukcje_n]] ...
[Case Else
[instrukcje_else]]
End Select
Przykład:
Select Case
Num
Case
1 To 5
MsgBox "Przedział od 1 do 5"
Case
6, 7, 8
MsgBox "Przedział od 6 do 8"
Case
9 To 10
MsgBox "Przedział od 9 do 10"
Case Is
> 10
MsgBox "Wartość większa od 10."
Case Else
MsgBox "Poza przedziałem" & _
" liczb dodatnich."
End Select
Kod
P
Kod VBA - Podstawy
Visual 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]
Wend
Przykład:
Private Sub
Iter(n,Licz As Long, Licz1 As Long)
Dim
Licz2 As Long
While
Licz < Licz1
Licz = Licz + n: Licz2 = Licz2 + 1
Wend
MsgBox
"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]
Wend
Przykład:
Private Sub
Iter(n,Licz As Long, Licz1 As Long)
Dim
Licz2 As Long
While
Licz < Licz1
Licz = Licz + n: Licz2 = Licz2 + 1
Wend
MsgBox
"Liczba iteracji wynosi: " & Licz2
End Sub
Punkt zapętlenia (
W
hile
end
)
Warunkowy początek pętli
Kod
P
Kod VBA - Podstawy
Visual 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, Ciag
For
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, Ciag
For
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 iteracji
1
koniec poczatek
krok
−
+
P
Kod VBA - Podstawy
Visual 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 = False
For Each
MojObiekt In MojaKolekcja
If
MojObiekt.Text = "Egzamin" Then
Istnieje = True
Exit For
End If
Next
Składnia:
For Each element In grupa
[instrukcje]
[Exit For]
[instrukcje]
Next [element]
Przykład:
Dim
Istnieje, MojObiekt, MojaKolekcja
Istnieje = False
For Each
MojObiekt In MojaKolekcja
If
MojObiekt.Text = "Egzamin" Then
Istnieje = True
Exit For
End If
Next
Kod
Dynamiczne określenie liczby iteracji
Kod VBA - Podstawy
Visual 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 - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
58
Instrukcja pętli logicznej (Do ... Loop) c.d.
Przykład:
Dim
Flaga, Licznik
Flaga = True: Licznik = 0
Do
'Zewnętrzna pętla.
Do While
Licznik < 20
'Wewnętrzna pętla.
Licznik = Licznik + 1 'Zwiększaj licznik.
If
Licznik = 10 Then
Flaga = False
Exit Do
'Wyjdź z wewnętrznej pętli.
End If
Loop
Loop Until (
Flaga = False)
‘Wyjdź z zewnętrznej pętli.
Przykład:
Dim
Flaga, Licznik
Flaga = True: Licznik = 0
Do
'Zewnętrzna pętla.
Do While
Licznik < 20
'Wewnętrzna pętla.
Licznik = Licznik + 1 'Zwiększaj licznik.
If
Licznik = 10 Then
Flaga = False
Exit Do
'Wyjdź z wewnętrznej pętli.
End If
Loop
Loop Until (
Flaga = False)
‘Wyjdź z zewnętrznej pętli.
Kod
P
Kod VBA - Podstawy
Visual 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)")
Do
If
Odpowiedz = "" Then
Odpowiedz = InputBox("Nic nie wpisałeś. " & _
"Wpisz literę A, B, C, D lub E.")
ElseIf Len
(Odpowiedz) > 1 Then
Odpowiedz = InputBox("Wpisz tylko jedną literę.")
ElseIf
Odpowiedz < "A" Or Odpowiedz > "E" Then
Odpowiedz = InputBox("Nieprawidłowa litera. " & _
"Wpisz literę A, B, C, D lub E.")
Else
MsgBox
"Dziękuję. Dane zostały przyjęte"
Exit Do
End If
Loop
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)")
Do
If
Odpowiedz = "" Then
Odpowiedz = InputBox("Nic nie wpisałeś. " & _
"Wpisz literę A, B, C, D lub E.")
ElseIf Len
(Odpowiedz) > 1 Then
Odpowiedz = InputBox("Wpisz tylko jedną literę.")
ElseIf
Odpowiedz < "A" Or Odpowiedz > "E" Then
Odpowiedz = InputBox("Nieprawidłowa litera. " & _
"Wpisz literę A, B, C, D lub E.")
Else
MsgBox
"Dziękuję. Dane zostały przyjęte"
Exit Do
End If
Loop
End Sub
Kod
P
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
60
Instrukcja skoku do etykiety (GoTo)
Składnia:
Goto etykieta
Podstawowe 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 etykieta
Podstawowe 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 - Podstawy
Visual 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 If
Select Case
Wartosc
Case
2100
GoTo
WartoscSpecjalna
Case Is
< 1000
MsgBox "Wartość mniejsza niż 1000"
Case Is
>= 1000
MsgBox "Wartość większa lub równa 1000"
End Select
Exit Sub
WartoscSpecjalna:
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 If
Select Case
Wartosc
Case
2100
GoTo
WartoscSpecjalna
Case Is
< 1000
MsgBox "Wartość mniejsza niż 1000"
Case Is
>= 1000
MsgBox "Wartość większa lub równa 1000"
End Select
Exit Sub
WartoscSpecjalna:
MsgBox "Podano wartość specjalną."
End Sub
Kod
P
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
62
Przykład zastosowania instrukcji (GoTo) c.d.
Przykład:
Sub
GoToDemo(Numer)
Dim
MyString
If
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
MyString
If
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