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
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
1
Funkcje wbudowane - numeryczne
Funkcja
Opis
Abs(liczba)
Zwraca bezwzględną wartość argumentu. Zwracana wartość jest tego
samego typu co argument funkcji.
Atn(liczba)
Zwraca wartość typu Double równą arcusowi tangensowi liczby.
Cos(liczba)
Funkcja zwraca wartość typu Double odpowiadającą cosinusowi kąta
podanego w radianach.
Exp(liczba)
Funkcja zwraca wartość typu Double równą stałej e (podstawa
logarytmu naturalnego) podniesionej do potęgi liczba.
Int(liczba)
Fix(liczba)
Funkcje zwracają wartości tego samego typu co przekazany
argument. Wartość funkcji odpowiada części całkowitej argumentu.
Fix(liczba) = Sgn(liczba) * Int(Abs(liczba))
Dim Liczba
Liczba = Int(99.8)
'Zwróci 99.
Liczba = Fix(99.2)
'Zwróci 99
Liczba = Int(-99.8) 'Zwróci -100.
Liczba = Fix(-99.8) 'Zwróci –99.
Liczba = Int(-99.2)
'Zwróci -100.
Liczba = Fix(-99.2)
'Zwróci -99.
Kod
P
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
2
Funkcje wbudowane – numeryczne c.d.
Funkcja
Opis
Log(liczba)
Zwraca wartość typu Double równą logarytmowi naturalnemu
liczby.
Rnd[(liczba)] Zwraca wartość typu Single będącą liczbą losową.
Randomize [liczba] - Inicjuje generator liczb losowych.
Sin(liczba)
Zwraca wartość typu Double równą sinusowi kąta podanego w
radianach.
Sqr(liczba)
Zwraca wartość typu Double równą pierwiastkowi kwadratowemu z
liczby.
Tan(liczba)
Zwraca wartość typu Double równą tangensowi kąta podanego w
radianach.
Sgn(liczba)
Zwraca wartość typu Variant (Integer) reprezentującą znak liczby.
Wartosc1 = 42: Wartosc2 = -2.6: Wartosc3 = 0
Znak = Sgn(Wartosc1) ' Zwraca 1.
Znak = Sgn(Wartosc2) ' Zwraca -1.
Znak = Sgn(Wartosc3) ' Zwraca 0.
Kod
P
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
3
Funkcje wbudowane – łańcuchowe
Funkcja
Opis
Trim(ciąg)
Obcina spacje początkowe i końcowe w łańcuchu ciąg.
Mid(string, _
start[, długość])
Zwraca wartość typu Variant (String) zawierającą podaną liczbę
znaków z ciągu znaków.
Chr(kod_znaku) Zwraca wartość typu String zawierającą znak odpowiadający
podanemu kodowi znaku.
MojZnak = Chr(65) ' Zwraca A.
LCase(ciąg)
Zwraca wartość typu String zamienioną na małe litery.
UCase(ciąg)
Zwraca wartość typu Variant (String) zawierającą podany ciąg
zamieniony na wielkie litery.
LTrim(ciąg)
Obcina spacje początkowe w łańcuchu ciąg.
RTrim(ciąg)
Obcina spacje końcowe w łańcuchu ciąg.
MidB(string, _
start[, długość])
Zwraca wartość typu Variant (String) zawierającą podaną liczbę
bajtów z ciągu znaków (na znak przypadają 2 bajty).
Lanc1 = MidB(Lanc, 3, 4) ‘Z „ABCD” zwróci „BC”
Kod
Kod
P
P1
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
4
Funkcje wbudowane – łańcuchowe c.d.
Funkcja
Opis
Left(lancuch, _
długość)
Zwraca wartość typu Variant (String) zawierającą podaną liczbę
znaków począwszy od lewej strony ciągu znaków lancuch.
Right(lancuch, _
długość)
Zwraca wartość typu Variant (String) zawierającą podaną liczbę
znaków począwszy od prawej strony ciągu znaków lancuch.
Len(ciąg |
nazwa_zmiennej)
Zwraca wartość typu Long zawierającą liczbę znaków w ciągu
znaków lub liczbę bajtów niezbędnych do przechowania
zmiennej nazwa_zmiennej.
LenB(ciąg |
nazwa_zmiennej)
Zwraca wartość typu Long zawierającą liczbę bajtów w ciągu
znaków lub liczbę bajtów niezbędnych do przechowania w
pamięci zmiennej nazwa_zmiennej, także zdefiniowanej przez
użytkownika (włącznie z przestrzeniami między elementami).
InStr([start, ]
string1, string2
[,compare])
Zwraca wartość typu Variant (Long) określającą miejsce
pierwszego wystąpienia jednego ciągu znaków w drugim.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
5
Przykłady zastosowań funkcji (Len, LenB)
Type
MojRekord
ID As Integer
Nazwisko As String * 10
Adres As String * 30
End Type
Private Sub
Lancuchy()
Dim
Klient As MojRekord
Dim
MyInt As Integer, MyCur As Currency
Dim
MyString, MyLen, MyStr
MyString = "Hello World": MyStr = "Abc"
MyLen = Len(MyInt)
'Zwraca 2.
MyLen = Len(Klient)
'Zwraca 42.
MyLen = Len(MyString)
'Zwraca 11.
MyLen = Len(MyCur)
'Zwraca 8.
MyLen = LenB(MyStr)
'Zwraca 6.
End Sub
Type
MojRekord
ID As Integer
Nazwisko As String * 10
Adres As String * 30
End Type
Private Sub
Lancuchy()
Dim
Klient As MojRekord
Dim
MyInt As Integer, MyCur As Currency
Dim
MyString, MyLen, MyStr
MyString = "Hello World": MyStr = "Abc"
MyLen = Len(MyInt)
'Zwraca 2.
MyLen = Len(Klient)
'Zwraca 42.
MyLen = Len(MyString)
'Zwraca 11.
MyLen = Len(MyCur)
'Zwraca 8.
MyLen = LenB(MyStr)
'Zwraca 6.
End Sub
Notacja DBCS (Double-Byte
Character Set )
Kod
P
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
6
Składnia funkcji (InStr)
InStr([start, ] string1, string2 [,compare])
start
Określa pozycję początkową poszukiwań w łańcuchu string1, parametr
jest wymagany przy określeniu wartości compare.
string1
Element obowiązkowy. Łańcuch przeszukiwany.
string2
Element obowiązkowy. Łańcuch lub znak poszukiwany.
vbUseCompareOption
-1 Pobiera opcje porównywania z ustawień
Option Compare.
0 Porównywanie binarne.
vbTextCompare
1 Porównywanie tekstowe.
Porównywanie oparte na informacji
znajdującej się w bazie MS Access.
2
vbBinaryCompare
compare
vbDatabaseCompare
Pozycja deklaracji na początku modułu:
Option Compare {Binary | Text | Database}
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
7
Przykłady zastosowań funkcji (InStr)
Zwracane wartości funkcji - InStr([start, ] string1, string2 [,compare])
Warunek
Zwrócona wartość
string1 posiada zerową długość
0
string1 posiada wartość Null
Null
string2 posiada wartość zerową
start
string2 posiada wartość Null
Null
string2 nie został znaleziony
0
string2 został znaleziony w string1
Pozycja w której został odszukany
start > string2
0
Dim
SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP"
SearchChar = "P"
MyPos = InStr(4, SearchString, SearchChar, 1)
'Zwraca 6.
MyPos = InStr(1, SearchString, SearchChar, 0)
'Zwraca 9.
MyPos = InStr(SearchString, SearchChar)
'Zwraca 9.
MyPos = InStr(1, SearchString, "W")
'Zwraca 0.
Kod
Binarne
Tekstowe
P
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
8
Przykłady zastosowań funkcji łańcuchowych
Public Function
WymianaZnaku(x,x1,x2)
Dim
p As Long
Dim
s1 As String, s2 As String
p = InStr(1, x, x1, 1)
If
p = 0 Then
WymianaZnaku = x
Exit Function
End If
s1 = Left(x, p - 1)
s2 = Right(x, Len(x) - p)
WymianaZnaku = s1 & x2 & s2
End Function
Public Function
WymianaZnaku(x,x1,x2)
Dim
p As Long
Dim
s1 As String, s2 As String
p = InStr(1, x, x1, 1)
If
p = 0 Then
WymianaZnaku = x
Exit Function
End If
s1 = Left(x, p - 1)
s2 = Right(x, Len(x) - p)
WymianaZnaku = s1 & x2 & s2
End Function
Kod
Lańcuch
przeszukiwany
Znak
szukany
Znak do
wstawienia
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
9
Składnia funkcji (Format)
Format
(Wyrażenie[, Format[, PierwszyDzienTygodnia[, PierwszyTydzienRoku]]])
Wyrażenie
Element obowiązkowy. Dowolne poprawne wyrażenie.
Format
Element opcjonalny. Nazwa lub zdefiniowane przez
użytkownika wyrażenie formatujące.
PierwszyDzienTygodnia Element opcjonalny. Opcjonalna wartość lub stała
określająca pierwszy dzień tygodnia.
PierwszyTydzienRoku
Element opcjonalny. Opcjonalna wartość lub stała
określająca pierwszy tydzień roku.
Różne formaty dla różnych wartości numerycznych
Liczba sekcji
Otrzymany wynik wyrażenia Format (użytkownika)
1
Stosowane do wszystkich wartości.
2
Pierwsza do dodatnich wartości i zera, druga do ujemnych wartości.
3
Pierwsza do dodatnich, druga do ujemnych, trzecia do zera.
4
Pierwsze trzy jak dla liczby sekcji 3, czwarta do wartości Null.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
10
Formaty dla funkcji (Format)
Różne formaty dla różnych wartości łańcuchowych
Liczba sekcji
Otrzymany wynik wyrażenia Format
1
Wyrażenie Format stosowane do wszystkich danych string.
2
Pierwsza sekcja stosowana do wartości łańcuchowych, druga do
wartości Null i do pustych łańcuchów (””).
Zdefiniowane formaty numeryczne
Nazwa formatu
Opis
Currency
Wyświetla liczbę z separatorem tysięcy. Formatowanie oparte na
ustawieniach lokalnych w systemie.
General Number Wyświetla liczbę bez separatora tysięcy.
Fixed
Wyświetla przynajmniej jedną cyfrę od lewej i dwie cyfry od
prawej strony separatora dziesiętnego.
Standard
Wyświetla liczbę z separatorem tysięcy, przynajmniej jedną cyfrę
od lewej i dwie cyfry od prawej strony separatora dziesiętnego.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
11
Formaty dla funkcji (Format) c.d.
Nazwa formatu
Opis
Percent
Wyświetla liczbę pomnożoną przez 100 ze znakiem procentu (%).
Wyświetla dwie cyfry po prawej stronie separatora dziesiętnego.
Scientific
Używa standardowego formatu wykładniczego.
Yes/No
Wyświetla nie (No), jeśli liczba jest 0, w przeciwnym przypadku
wyświetla tak (Yes).
True/False
Wyświetla False (fałsz), jeśli liczba jest 0, w przeciwnym
przypadku wyświetla True (prawda).
On/Off
Wyświetla Off, jeżeli liczba jest 0, w przeciwnym wypadku On.
Znaki formatów numerycznych i łańcuchowych użytkownika
Znak
Opis
None
Wyświetla niesformatowaną liczbę.
0
Znak pola. Wyświetla cyfrę lub zero. Nadmiar z lewej strony jest
wyświetlany, natomiast z prawej strony jest obcinany.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
12
Znaki formatów funkcji (Format)
Znak
Opis
#
Znak pola. Wyświetla cyfrę lub nic. Nie są wyświetlane nadmiarowe zera.
.
Znak dziesiętny. Pozycja kropki dziesiętnej w utworzonym formacie.
Jeżeli liczba jest mniejsza od jedności, w celu wyświetlenia zera należy
przed kropką, użyć znaku „0”.
%
Znak procentu. Ustawiany na określonej pozycji. Wyrażenie jest mnożone
przez 100.
,
Separator tysięcy. Znak używany jako separator tysięcy w formatowanym
wyjściu zależy od formatu numerycznego rozpoznawanego przez system.
:
Separator czasu. Oddziela od siebie godziny, minuty i sekundy.
/
Separator daty. Oddziela od siebie dzień, miesiąc i rok.
E+ E-
e+ e-
Format wykładniczy. Powoduje, że liczba jest wyświetlana w formacie
wykładniczym. Liczbę znaków wykładnika określa się z prawej strony.
-+$()
Wyświetla znak literowy.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
13
Znaki formatów funkcji (Format) c.d.
Znak
Opis
\
Znak zezwolenia. Pozwala na wyświetlenie znaków używanych do
formatowania (a, c, d, h, m, n, p, q, s, t, w, y, /, :, #, 0, %, E, e,
przecinek, kropka, @, &, <, >, !).
” ”
Wyświetla łańcuch zawarty między dwoma znakami cudzysłowu. W
celu włączania łańcucha do argumentu Format z kodu należy użyć
funkcji Chr.
@
Miejsce na znak. Wyświetla znak lub spację.
&
<
>
!
Miejsce na znak. Wyświetla znak lub nic nie wyświetla.
Wyświetla wszystkie znaki w formacie małych liter.
Wyświetla wszystkie znaki w formacie dużych liter.
Ł
ań
cuchowe
Powoduje wypełnianie miejsc na znaki od lewej do prawej.
Standardowo są wypełniane od prawej do lewej.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
14
Formatowanie daty i czasu funkcją (Format)
Zdefiniowane nazwy formatów daty i czasu
Nazwa formatu
Opis
General Date
Wyświetlanie określone jest ustawieniami systemu.
Long Date
Wyświetla datę według formatu długiej daty ustawionego
przez system.
Long Time
Wyświetla czas według formatu długiego czasu
ustawionego przez system.
Medium Date
Wyświetla datę według formatu średniej daty
odpowiedniego do wersji języka aplikacji typu host.
Medium Time
Wyświetla czas w formacie 12-godzinnym.
Short Date
Wyświetla datę według formatu krótkiej daty, ustawionego
przez system.
Short Time
Wyświetla czas w formacie 24-godzinnym.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
15
Znaki formatów daty i czasu funkcji (Format)
Znaki do samodzielnego tworzenia formatów daty i czasu
Znak
Opis
:
Separator czasu oddzielający godziny, minuty i sekundy.
/
Separator daty oddzielający dzień, miesiąc i rok.
c
Wyświetla datę jako ddddd i czas jako ttttt, w tej kolejności.
d
Wyświetla dzień jako liczbę bez zera na początku.
dd
Wyświetla dzień jako liczbę z zerem na początku.
ddd
Wyświetla dzień w skrócie (skróty ang. np.: Thu, Fri).
dddd
Wyświetla dzień jako pełną nazwę (ang. np.: Friday).
ddddd
Wyświetla datę jako kompletną datę (najczęściej m/d/yy).
dddddd
Wyświetla datę jako kompletną datę (mmmm dd, yyyy).
w
Wyświetla dzień w postaci liczby (od 1 dla niedzieli do 7 dla soboty).
ww
Wyświetla tydzień w roku jako liczbę (1 do 54).
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
16
Znaki formatów daty i czasu funkcji (Format) c.d.
m
Wyświetla miesiąc jako liczbę bez zera na początku (od 1 do 12).
mm
Wyświetla miesiąc jako liczbę z zerem na początku (od 01 do 12).
mmm
Wyświetla miesiąc w skrócie (skróty ang. np.: Jan, Dec).
mmmm
Wyświetla miesiąc jako pełną nazwę (ang. np.: January, December).
q
Wyświetla kwartał roku jako liczbę (od 1 do 4).
y
Wyświetla dzień jako liczbę (od 1 do 366).
yy
Wyświetla rok jako dwucyfrową liczbę (od 00 do 99).
yyyy
Wyświetla rok jako trzy lub czterocyfrową liczbę (od 100 do 9999).
h
Wyświetla godzinę jako liczbę bez zera na początku (od 0 do 23).
hh
Wyświetla godzinę jako liczbę z zerem na początku (od 00 do 23).
n
Wyświetla minuty jako liczbę bez zera na początku (od 0 do 59).
nn
Wyświetla minuty jako liczbę z zerem na początku (od 00 do 59).
s
Wyświetla sekundy jako liczbę bez zera na początku (od 0 do 59).
ss
Wyświetla sekundy jako liczbę z zerem na początku (od 00 do 59).
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
17
Przykłady zastosowań funkcji (Format)
Przykład:
Dim
MyTime, MyDate, MyStr
MyTime = #17:04:23#
MyDate = #January 27, 1993#
MyStr = Format(Time, "Long Time")
‘Zwraca bieżący systemowy czas
‘w długim formacie.
MyStr = Format(Date, "Long Date")
‘Zwraca bieżącą systemową datę
‘w długim formacie.
MyStr = Format(MyTime, "h:m:s")
‘Zwraca "17:4:23".
MyStr = Format(MyTime, "hh:mm:ss AMPM")
‘Zwraca "05:04:23 PM".
Przykład:
Dim
MyTime, MyDate, MyStr
MyTime = #17:04:23#
MyDate = #January 27, 1993#
MyStr = Format(Time, "Long Time")
‘Zwraca bieżący systemowy czas
‘w długim formacie.
MyStr = Format(Date, "Long Date")
‘Zwraca bieżącą systemową datę
‘w długim formacie.
MyStr = Format(MyTime, "h:m:s")
‘Zwraca "17:4:23".
MyStr = Format(MyTime, "hh:mm:ss AMPM")
‘Zwraca "05:04:23 PM".
Kod
P
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
18
Przykłady zastosowań funkcji (Format) c.d.
Przykład:
MyStr = Format(MyDate, "dddd, mmm d yyyy")
'Zwraca „środa, sty 27 1993".
MyStr = Format(23)
'Zwraca "23".
MyStr = Format(5459.4, "##,##0.00")
'Zwraca "5 459,40".
MyStr = Format(334.9, "###0.00")
MyStr = Format(5, "0.00%")
'Zwraca "500,00%".
MyStr = Format("HELLO", "<")
'Zwraca "hello".
MyStr = Format("To jest to", ">")
'Zwraca „TO JEST TO".
Przykład:
MyStr = Format(MyDate, "dddd, mmm d yyyy")
'Zwraca „środa, sty 27 1993".
MyStr = Format(23)
'Zwraca "23".
MyStr = Format(5459.4, "##,##0.00")
'Zwraca "5 459,40".
MyStr = Format(334.9, "###0.00")
MyStr = Format(5, "0.00%")
'Zwraca "500,00%".
MyStr = Format("HELLO", "<")
'Zwraca "hello".
MyStr = Format("To jest to", ">")
'Zwraca „TO JEST TO".
Kod
P
P1
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
19
Funkcje daty i czasu
Funkcja
Opis
Date
Zwraca wartość typu (Date) zawierającą bieżącą datę
systemową.
Time
Zwraca wartość typu (Date) zawierającą bieżącą godzinę
systemową.
Now
Zwraca wartość typu (Date) określającą bieżącą datę i godzinę
systemową pobraną.
Second(godzina)
Zwraca wartość typu Variant (Integer), która jest liczbą
całkowitą z przedziału od 0 do 59 włącznie.
Minute(godzina)
Zwraca wartość typu Variant (Integer), która jest liczbą
całkowitą z przedziału od 0 do 59 włącznie.
Hour(godzina)
Zwraca wartość typu Variant (Integer), która jest liczbą
całkowitą z przedziału od 0 do 59 włącznie.
Day(data)
Zwraca wartość typu Variant (Integer), która jest liczbą
całkowitą z przedziału od 1 do 31 włącznie, określającą dzień
miesiąca.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
20
Funkcje daty i czasu c.d.
Funkcja
Opis
Weekday(data,
[pierwszydzientygodn
ia])
Zwraca wartość typu Variant (Integer) zawierającą liczbę
całkowitą określającą dzień tygodnia. Od 1 do 7.
Month(data)
Zwraca wartość typu Variant (Integer), która jest liczbą
całkowitą z przedziału od 1 do 12 włącznie, określającą
miesiąc roku.
Year(data)
Zwraca wartość typu Variant (Integer) zawierającą liczbę
całkowitą, określającą rok.
DateSerial(year,
month, day)
Zwraca wartość typu Variant (Date) dla określonego roku,
miesiąca i dnia.
TimeSerial(hour,
minute, second)
Zwraca wartość typu Variant (Date) zawierającą określenie
czasu dla konkretnej godziny, minuty i sekundy.
DateValue(data)
Zwraca wartość typu Variant (Date).
TimeValue(godzina) Zwraca wartość typu Variant (Date) zawierającą godzinę.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
21
Funkcje daty i czasu c.d.
Funkcja
Opis
DateAdd(jednostki_d,
ilość_jed, data)
Zwraca wartość typu Variant (Date) zawierającą
datę, do której dodano określony przedział czasu.
DateDiff(jednostki_d, data1,
data2 [,pierwszydzientygodnia
[, pierwszytydzienroku]])
Zwraca wartość typu Variant (Long) określającą
liczbę przedziałów czasowych pomiędzy dwiema
datami. Jednostki_d określają rodzaj jednostek.
DatePart(jednostki_d, date
[,pierwszydzientygodnia [,
pierwszytydzienroku]])
Zwraca wartość typu Variant (Integer) zawierającą
określoną część podanej daty.
Timer
Zwraca wartość typu Single określającą liczbę
sekund, które upłynęły od północy.
Dim
MojaData As Date
Dim
Msg
MojaData = InputBox("Wprowadź datę:", "Data", Date)
Msg = "Mamy kwartał nr: " & DatePart("q", MojaData)
MsgBox
Msg
Kod
P
Wartość domyślna
P1
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
22
Przykład zastosowania funkcji (Timer)
Dim
Intr As Boolean
Public Sub
TimerShow(S As Single)
Dim
Start
Do
Label1.Caption = Timer
DoEvents
Call
Delay(S)
Loop Until
Intr = False
End Sub
Public Sub
Delay(Time1 As Single)
Dim
Start
Start = Timer
Do
DoEvents
Loop Until
Timer - Start > Time1
End Sub
Dim
Intr As Boolean
Public Sub
TimerShow(S As Single)
Dim
Start
Do
Label1.Caption = Timer
DoEvents
Call
Delay(S)
Loop Until
Intr = False
End Sub
Public Sub
Delay(Time1 As Single)
Dim
Start
Start = Timer
Do
DoEvents
Loop Until
Timer - Start > Time1
End Sub
Kod
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
23
Funkcje testujące
Funkcja
Opis
IsDate(wyrażenie) Zwraca wartość typu Boolean wskazującą, czy wyrażenie może
zostać przekształcone na wartość oznaczającą datę.
IsArray(nazwa_z
miennej)
Zwraca wartość typu Boolean wskazującą, czy argument jest
zmienną prostą czy tablicą.
IsEmpty(wyrażeni
e)
Zwraca wartość typu Boolean wskazującą, czy zmienna została
zainicjowana.
IsMissing(nazwa_
argumentu)
Zwraca wartość Boolean wskazującą, czy argument
nieobowiązkowy typu Variant został przekazany do procedury.
IsNull(wyrażenie) Zwraca wartość Boolean wskazującą, czy wyrażenie nie
zawiera danych (ma wartość Null).
IsNumeric(wyraże
nie)
Zwraca wartość typu Boolean wskazującą, czy wartością
wyrażenia jest liczba.
IsObject(identyfik
ator)
Zwraca wartość typu Boolean wskazującą, czy identyfikator
reprezentuje zmienną obiektową.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
24
Funkcje konwersji danych
Funkcja
Opis
Str(liczba)
Zwraca wartość typu String reprezentującą liczbę.
Val(ciąg)
Zwraca wartości liczb tworzących ciąg w postaci wartości
numerycznej odpowiedniego typu.
Asc(ciąg)
Zwraca wartość typu Integer odpowiadającą kodowi znaku
pierwszego elementu w ciągu znaków.
Hex(liczba)
Zwraca wartość typu String reprezentującą heksadecymalną
(szesnastkową) wartość liczby.
Oct(liczba)
Zwraca wartość typu Variant (String) reprezentującą oktetową
(ósemkową) wartość liczby.
CBool(wyrażenie) Zwraca wartość typu Boolean. Konwersja dowolnego typu na
logiczny.
CByte(wyrażenie) Zwraca wartość typu Byte. Konwersja dowolnego typu na typ
Byte.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
25
Funkcje konwersji danych c.d.
Funkcja
Opis
CCur(wyrażenie)
Zwraca wartość typu Currency. Konwersja dowolnego typu na
typ Currency.
CDate(wyrażenie) Zwraca wartość typu Date. Konwersja dowolnego poprawnego
wyrażenia oznaczającego datę na typ Date.
CDbl(wyrażenie)
Zwraca wartość typu Double. Konwersja dowolnego typu z
poprawną wartością na typ Double.
CDec(wyrażenie)
Zwraca wartość typu Decimal. Konwersja dowolnego typu z
poprawną wartością na typ Decimal.
CInt(wyrażenie)
Zwraca wartość typu Integer. Konwersja dowolnego typu z
poprawną wartością na typ Integer.
CLng(wyrażenie)
Zwraca wartość typu Long. Konwersja dowolnego typu z
poprawną wartością na typ Long.
CSng(wyrażenie)
Zwraca wartość typu Single. Konwersja dowolnego typu z
poprawną wartością na typ Single.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
26
Funkcje konwersji danych c.d.
Funkcja
Opis
CVar(wyrażenie) Zwraca wartość typu Variant. Konwersja dowolnego typu z
poprawną wartością na typ Variant.
CStr(wyrażenie)
Zwraca wartość zależną od konwertowanego wyrażenia.
Dim
A, B, Test
A = 5: B = 5
'Inicjowanie zmiennych.
Test = CBool(A = B)
'Zmienna zawiera True.
A = 0
'Przypisanie wartości.
Test = CBool(A)
'Zmienna zawiera False.
Dim
MyDouble, MyByte
MyDouble = 125.5678
'MyDouble jest typu Double.
MyByte = CByte(MyDouble) 'MyByte zawiera 126.
Dim
MyCurr, MyDouble
MyCurr = CCur(234.456784) 'MyCurr jest typu Currency.
MyDouble = CDbl(MyCurr *8.2*0.01) 'Konwersja do Double.
Kod
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
27
Funkcje konwersji danych c.d.
Dim
MyDate, MyShortDate, MyTime, MyShortTime
MyDate = "12 luty 1969"
'Zdefiniowanie daty.
MyShortDate = CDate(MyDate)
'Konwersja do typu Date.
MyTime = "4:35:47 PM"
'Zdefiniowanie czasu.
MyShortTime = CDate(MyTime)
'Konwersja do typu Date.
Dim
MyInt, MyVar
MyInt = 4534
'MyInt jest typu Integer.
MyVar = CVar(MyInt & "000")
'MyVar zawiera łańcuch
'4534000.
Dim
MyDouble, MyString
MyDouble = 437.324
'MyDouble jest typu Double.
MyString = CStr(MyDouble)
'MyString zawiera "437.324".
Dim
MyDate, MyShortDate, MyTime, MyShortTime
MyDate = "12 luty 1969"
'Zdefiniowanie daty.
MyShortDate = CDate(MyDate)
'Konwersja do typu Date.
MyTime = "4:35:47 PM"
'Zdefiniowanie czasu.
MyShortTime = CDate(MyTime)
'Konwersja do typu Date.
Dim
MyInt, MyVar
MyInt = 4534
'MyInt jest typu Integer.
MyVar = CVar(MyInt & "000")
'MyVar zawiera łańcuch
'4534000.
Dim
MyDouble, MyString
MyDouble = 437.324
'MyDouble jest typu Double.
MyString = CStr(MyDouble)
'MyString zawiera "437.324".
Kod
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
28
Instrukcje operacji wejścia/wyjścia
Open nazwa_sciezki For tryb [Access dostep] [blokada] As
[#]numer_pliku [Len=dlugosc_rekordu]
Nazwa_sciezki Element obowiązkowy. Wyrażenie znakowe określające nazwę
pliku może zawierać nazwę katalogu lub folderu i dysku.
tryb
Element obowiązkowy. Słowo kluczowe określające tryb otwarcia
pliku: Append, Binary, Input, Output lub Random.
dostep
Element nieobowiązkowy. Słowo kluczowe określające dozwolone
operacje na otwartym pliku: Read, Write lub Read Write.
blokada
Element nieobowiązkowy. Słowo kluczowe określające dozwolone
dla innych procesów operacje na pliku: Shared, Lock Read, Lock
Write i Lock Read Write.
numer_pliku
Element obowiązkowy. Numer pliku z zakresu 1 do 511 włącznie.
Następny wolny numer pliku - wykorzystanie funkcji FreeFile.
dlugosc_rekor
du
Element nieobowiązkowy. Liczba mniejsza lub równa 32 767
(bajtów).
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
29
Instrukcje operacji wejścia/wyjścia c.d.
Typy dostępu do pliku operacji Open:
Input - powoduje otwarcie do czytania z pliku. W tym
trybie można używać instrukcji: Input #.
Output - powoduje otwarcie do zapisu w pliku. W tym
trybie można używać instrukcji: Write # lub Print #.
Append - w przypadku otwarcia w tym trybie
istniejącego pliku, dane zostaną zapisane na jego końcu,
bez usuwania dotychczasowej zawartości. Jeżeli plik o
podanej nazwie nie istnieje, następuje jego utworzenie.
W tym trybie można używać instrukcji: Write # lub
Print #.
Random - odczyt i zapis danych – rekordowych.
Binary - odczyt i zapis porcji bajtów do pliku.
Sekwencyjny
Swobodny
Binarny
Tryb
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
30
Instrukcje operacji wejścia/wyjścia c.d.
Close [[[#]numer_pliku] [, [#]numer_pliku]] ...
Kończy operację wejścia/wyjścia na pliku otwartym za pomocą instrukcji Open
numer_pliku
Element nieobowiązkowy. Numer zamykanego zbioru. W przypadku
braku jakiegokolwiek numeru, zostaną zamknięte wszystkie otwarte
zbiory.
Kod
Open
„test.txt" For Input As #1 'Sekwencyjne otwarcie w
'trybie Input. Należy zamknąć zbiór,
'aby otworzyć w innym trybie.
Close
#1
Open
„test.txt" For Binary Access Write As #1 'Binarne
'otwarcie.
Close
#1
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
31
Instrukcje operacji wejścia/wyjścia c.d.
Type
Record
'Zdefiniowanie własnego typu rekordowego.
ID As Integer
Name As String * 20
End Type
Dim
MyRecord As Record 'Deklaracja zmiennej rekordowej.
Open
„test.txt" For Random As #1 Len = Len(MyRecord)
Close
#1
Open
„test.txt" For Output Shared As #1 'Dowolny proces
'może zapisywać lub odczytywać ze zbioru „TESTFILE”.
Close
#1
Open
„test.txt" For Binary Access Read Lock Read As #1
'
Binarne otwarcie w trybie odczytu. Inne
procesy nie
'mają dostępu.
Type
Record
'Zdefiniowanie własnego typu rekordowego.
ID As Integer
Name As String * 20
End Type
Dim
MyRecord As Record 'Deklaracja zmiennej rekordowej.
Open
„test.txt" For Random As #1 Len = Len(MyRecord)
Close
#1
Open
„test.txt" For Output Shared As #1 'Dowolny proces
'może zapisywać lub odczytywać ze zbioru „TESTFILE”.
Close
#1
Open
„test.txt" For Binary Access Read Lock Read As #1
'
Binarne otwarcie w trybie odczytu. Inne
procesy nie
'mają dostępu.
Kod
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
32
Instrukcje operacji wejścia/wyjścia c.d.
Input #numer_pliku, lista_zmiennych
Odczytuje dane z otwartego pliku sekwencyjnego i przypisuje dane do zmiennej.
numer_pliku
Numer zbioru, z którego będą pobierane dane.
lista_zmiennych
Zmienne, którym zostaną przypisane wartości ze wskazanego
zbioru numer_pliku.
Dim
MyString, MyNumber
Open
"test.txt" For Input As #1
Do While
Not EOF(1)
'Zapętlenie do końca zbioru.
Input #
1, MyString, MyNumber
'Przesłanie danych do
'dwóch zmiennych.
MsgBox
MyString + " " + MyNumber
Loop
Close
#1
Kod
P
S
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
33
Instrukcje operacji wejścia/wyjścia c.d.
Print #numer_pliku, [[{Spc(n) | Tab[(n)]}] [wyrazenie]
[pozycja_znaku]]
Zapisuje do pliku sekwencyjnego dane w postaci sformatowanej do wydruku.
numer_pliku
Numer docelowego pliku.
Spc(n)
Służy do wstawiania do wydruku znaków spacji; wartość n oznacza
liczbę wstawionych spacji.
Tab(n)
Służy do ustawiania punktu wstawiania w kolumnie o podanym
numerze bezwzględnym; wartość n oznacza numer kolumny.
Bez parametru – ustawia co 14 kolumn.
wyrazenie
Dane do zapisu: numeryczne lub łańcuchowe.
pozycja_znaku Określa punkt wstawiania następnego znaku. Aby umieścić punkt
wstawiania bezpośrednio po ostatnim wyświetlonym znaku, należy
użyć średnika. Jeżeli opcja pozycja_znaku jest pominięta, następny
znak drukowany jest w następnym wierszu.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
34
Instrukcje operacji wejścia/wyjścia c.d.
Open
„test1.txt" For Output As #1
Print #
1, "To tylko test"
Print #
1,
’Wydruk pustej linii do zbioru.
Print #
1, "Zone 1"; Tab ; "Zone 2" ‘Dwie strefy druku.
Print #
1, "Hello" ; " " ; "World" ‘Spacja.
Print #
1, Spc(5) ; "5 przednich spacji " ‘Pięć spacji.
Print #
1, Tab(10) ; "Hello" ‘Druk w kolumnie nr 10.
Dim
MyBool, MyDate, MyNull, MyError
MyBool = False : MyDate = #7/20/1969#
MyNull = Null : MyError = CVErr(32767)
Print #
1, MyBool ; " jest wartością typu Boolean"
Print #
1, MyDate ; " jest datą"
Print #
1, MyNull ; " posiada wartość null"
Print #
1, MyError ; " określa numer błędu"
Close
#1
Open
„test1.txt" For Output As #1
Print #
1, "To tylko test"
Print #
1,
’Wydruk pustej linii do zbioru.
Print #
1, "Zone 1"; Tab ; "Zone 2" ‘Dwie strefy druku.
Print #
1, "Hello" ; " " ; "World" ‘Spacja.
Print #
1, Spc(5) ; "5 przednich spacji " ‘Pięć spacji.
Print #
1, Tab(10) ; "Hello" ‘Druk w kolumnie nr 10.
Dim
MyBool, MyDate, MyNull, MyError
MyBool = False : MyDate = #7/20/1969#
MyNull = Null : MyError = CVErr(32767)
Print #
1, MyBool ; " jest wartością typu Boolean"
Print #
1, MyDate ; " jest datą"
Print #
1, MyNull ; " posiada wartość null"
Print #
1, MyError ; " określa numer błędu"
Close
#1
Kod
P
S
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
35
Instrukcje operacji wejścia/wyjścia c.d.
Write #numer_pliku, [lista_wyjscia]
Zapisuje dane do pliku sekwencyjnego.
numer_pliku
Element obowiązkowy. Dowolny poprawny numer pliku.
lista_wyjscia
Element nieobowiązkowy. Jest to jedno lub więcej wyrażeń
numerycznych lub wyrażeń znakowych oddzielonych od siebie
przecinkami.
Open "
test2.txt" For Output As #1
Write
#1, "Dane zapisane do pliku", 234
Write
#1,
'Zapisz pusty wiersz.
#1, Spc(5) ; "5 znaków spacji "
#1, Tab(10) ; "Cześć" 'Drukuj słowo w 10 kolumnie.
Close
#1
'Zamknij plik.
Kod
P
S
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
36
Instrukcje operacji wejścia/wyjścia c.d.
Put [#]numer_pliku, [numer_rekordu], nazwa_zmiennej
Przepisuje dane ze zmiennej do pliku dyskowego.
numer_pliku
Element obowiązkowy. Dowolny poprawny numer pliku.
numer_rekordu
Element nieobowiązkowy. Wartość typu Variant. Jest to numer
rekordu (Random) lub numer bajtu (Binary).
nazwa_zmiennej Element obowiązkowy. Nazwa zmiennej zawierającej dane, które
mają być zapisane na dysk.
Type
Rekord
ID As Integer
Nazwisko As String * 20
End Type
Dim
MyRecord As Rekord, RecordNumber
Open
„test3.txt" For Random As #1 Len = Len(MyRecord)
For
RecordNumber = 1 To 5
MyRecord.ID = RecordNumber
MyRecord.Nazwisko = "Moje Nazwisko" & RecordNumber
Put #
1, RecordNumber, MyRecord
Next
RecordNumber
Close
#1
Kod
P
S
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
37
Instrukcje operacji wejścia/wyjścia c.d.
Get [#]numer_pliku, [numer_rekordu], nazwa_zmiennej
Wczytuje do zmiennej dane z otwartego pliku dyskowego
numer_pliku
Element obowiązkowy. Dowolny poprawny numer pliku.
numer_rekordu
Element nieobowiązkowy. Wartość typu Variant. Numer rekordu
(Random) lub numer bajtu (Binary).
nazwa_zmiennej Element obowiązkowy. Nazwa zmiennej, do której wczytywane
są dane.
Type
Rekord
ID As Integer
Nazwisko As String * 20
End Type
Dim
MojRekord As Rekord, Pozycja
Open "
Dane.dat" For Random As #1 Len = Len(MojRekord)
For
Pozycja = 1 To 5
Get
#1, Pozycja, MojRekord
Next
Pozycja
Close
#1
Kod
P
S
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
38
Instrukcje operacji wejścia/wyjścia c.d.
Seek(numer_pliku)
Zwraca wartość typu Long określającą bieżącą pozycję odczytu/zapisu dla pliku
otwartego instrukcją Open.
numer_pliku
Element obowiązkowy. Dowolny poprawny numer pliku.
Type
Rekord
ID As Integer
Nazwisko As String * 20
End Type
Dim
MojRekord As Rekord, NrRekordu, Res
Open "
Dane.dat" For Random As #1 Len = Len(MojRekord)
Do While Not
EOF(1)
Get
#1, , MojRekord
'Przeczytaj kolejny rekord.
Res = MsgBox("Pozycja w pliku: " & Seek(1), 64, _
"Informacja")
Loop
Close
#1
Kod
P
S
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
39
Polecenia operacji na plikach i katalogach
Polecenie
Opis działania
ChDir
Zmienia bieżący katalog
ChDrive
Zmienia bieżący napęd
Dir
Zwraca nazwę pliku lub katalog pasujący do określonego wzorca
lub atrybutu pliku
FileCopy
Kopiuje plik
FileDateTime
Zwraca datę i godzinę ostatniej modyfikacji pliku
FileLen
Zwraca rozmiar pliku w bajtach
GetAttr
Zwraca wartość reprezentującą atrybut pliku
Kill
Usuwa plik
MkDir
Tworzy nowy katalog
Name
Zmienia nazwę pliku lub katalogu
RmDir
Usuwa pusty katalog
SetAttr
Zmienia atrybut pliku
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
40
Funkcje sprawdzające - przykłady
Function
FileExists(nazwa) As Boolean
FileExists = Dir(nazwa) <> ””
End Function
Zwrócenie przez funkcję Dir pustego ciągu znaków oznacza, że nie można
znaleźć poszukiwanego pliku.
Kod
Zwrócenie przez porównanie iloczynu literału z funkcją GetAttr oraz literału,
wartości false oznacza, że nie można znaleźć poszukiwanego katalogu (folderu).
Function
PathExists(nazwa) As Boolean
PathExists = (GetAttr(nazwa) and vbDirectory) _
= vbDirectory
End Function
Kod
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
41
Lista plików w katalogu
Sub
ListaPlikow(Directory As String)
Dim
r As Integer
r = 1
'Wstawianie i formatowanie nagłówków
Cells.ClearContents
Cells
(r, 1).Value = "Nazwa pliku"
Cells
(r, 2).Value = "Rozmiar"
Cells
(r, 3).Value = "Data/Godzina"
Range
("A1:C1").Font.Bold = True
'Pobieranie plików
f = Dir(Directory, 7) ‘pobiera pierwszy wpis (zbiór)
Do While
f <> ""
r = r + 1
Cells
(r, 1).Value = f
Cells
(r, 2).Value = FileLen(Directory & f)
Cells
(r, 3).Value = FileDateTime(Directory & f)
f = Dir
‘pobiera kolejny wpis
Loop
End Sub
Kod
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
42
Instrukcja dla skróconego wywołania (With)
Składnia:
With obiekt
.Podprogram.Wlasciwosc
[instrukcje]
End With
Składnia:
With obiekt
.Podprogram.Wlasciwosc
[instrukcje]
End With
Kod
Równoważne podprogramy
With
MojObiekt
.Height = 100
.Caption ="Pozdrawiam"
With
.Font
.Color = Czerwony
.Bold = True
End With
End With
MojObiekt.Height = 100
MojObiekt.Caption = "Pozdrawiam"
MojObiekt.Font.Color = Czerwony
MojObiekt.Font.Bold = True
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
43
Wykorzystanie obiektu FileSearch
Właściwość lub metoda
Opis działania
FileName
Nazwa pliku do wyszukania (możliwe do stosowania znaki
wzorców)
FoundFile
Zwraca obiekt zawierający nazwy znalezionych plików
LookIn
Katalog do wyszukiwania
SearchSubFolder
True, jeśli mają być przeszukiwane podkatalogi
Execute
Wykonuje operację wyszukiwania
NewSearch
Resetuje obiekt FileSearch
Function
PlikIstnieje(path, fname) As Boolean
With Application.FileSearch
.NewSearch
.FileName
= fname
.LookIn
= path
.Execute
PlikIstnieje = .FoundFiles.Count = 1
End With
End Function
Kod
Sprawdzenie czy plik istnieje
(od
Office 97
) ?
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
44
Lista plików z zastosowaniem FileSearch
Sub
ListaPlikow2(Directory As String)
Dim
r As Integer
r = 1
'Wstawianie i formatowanie nagłówków
Cells.ClearContents
Cells
(r, 1).Value = "Nazwa pliku"
Cells
(r, 2).Value = "Rozmiar"
Cells
(r, 3).Value = "Data/Godzina"
Range
("A1:C1").Font.Bold = True
r = r + 1
With Application.FileSearch
.NewSearch
.LookIn = Directory
.FileName = ”*.*”
.SearchSubFolders = False
.Execute
For
i = 1 To .FoundFiles.Count
Cells
(r, 1).Value = .FoundFiles(i)
Cells
(r, 2).Value = FileLen(.FoundFiles(i))
Cells
(r, 3).Value = FileDateTime(.FoundFiles(i))
r = r + 1
Next i
End With
End Sub
Kod
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
45
Obsługa błędów w VBA
Rodzaj błędu
Opis
Składniowy
Nieprawidłowe wpisanie instrukcji. Są wychwytywane w trakcie
pisania instrukcji lub podczas pierwszego uruchomienia procedury.
Nieprawidłowa instrukcja zostaje podświetlona lub zostaje
wyświetlone okno informacyjne.
Wykonania
Mogą wystąpić mimo poprawnego napisania instrukcji. Powodem
wystąpienia może być np. wprowadzenie łańcucha zamiast liczby,
brak dyskietki w napędzie, podanie niewłaściwej ścieżki dostępu
do pliku lub nieprawidłowej wartości liczbowej.
Logiczny
Otrzymanie błędnego wyniku. Wina najczęściej leży po stronie
programisty. Nieprzewidziana operacja lub zastosowanie złej logiki
w odniesieniu do algorytmu programu komputerowego.
Najczęściej stosowane narzędzia przy obsłudze błędów:
On Error, Resume, obiekt Err
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
46
Obsługa błędów w VBA c.d.
Przykład wygenerowanego błędu podczas działania procedury:
Public Sub
Blad1()
Dim
a, b, c
a = InputBox("Podaj wartość a: ")
b = InputBox("Podaj wartość b: ")
c = a / b: MsgBox "Wynik obliczeń: " & c
End Sub
Przykład wygenerowanego błędu podczas działania procedury:
Public Sub
Blad1()
Dim
a, b, c
a = InputBox("Podaj wartość a: ")
b = InputBox("Podaj wartość b: ")
c = a / b: MsgBox "Wynik obliczeń: " & c
End Sub
Kod
P
Numer wygenerowanego błędu
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
47
Obsługa błędów w VBA c.d.
Zastosowanie instrukcji On Error w zabezpieczeniu przed błędami:
Public Sub
Blad2()
Dim
a, b, c
On Error GoTo
Blad
a = InputBox("Podaj wartość a: ")
b = InputBox("Podaj wartość b: ")
c = a / b: MsgBox "Wynik obliczeń: " & c
Exit Sub
Blad:
MsgBox
"Uwaga! Dzielenie przez zero!"
End Sub
Zastosowanie instrukcji On Error w zabezpieczeniu przed błędami:
Public Sub
Blad2()
Dim
a, b, c
On Error GoTo
Blad
a = InputBox("Podaj wartość a: ")
b = InputBox("Podaj wartość b: ")
c = a / b: MsgBox "Wynik obliczeń: " & c
Exit Sub
Blad:
MsgBox
"Uwaga! Dzielenie przez zero!"
End Sub
P
Kod
Zabezpieczenie przed wszystkimi błędami.
Komunikat w ogólności może być nieprawidłowy.
W chwili błędu, wyjście z
podprogramu.
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
48
Obsługa błędów w VBA c.d.
Zastosowanie instrukcji Resume przy powrocie do miejsca błędu:
Public Sub
Blad3()
Dim
a, b, c
On Error GoTo
Blad
a = InputBox("Podaj wartość a: ")
b = InputBox("Podaj wartość b: ")
c = a / b: MsgBox "Wynik obliczeń: " & c
Exit Sub
Blad:
MsgBox
"Uwaga! Dzielenie przez zero!„
b = 1: Resume
End Sub
Zastosowanie instrukcji Resume przy powrocie do miejsca błędu:
Public Sub
Blad3()
Dim
a, b, c
On Error GoTo
Blad
a = InputBox("Podaj wartość a: ")
b = InputBox("Podaj wartość b: ")
c = a / b: MsgBox "Wynik obliczeń: " & c
Exit Sub
Blad:
MsgBox
"Uwaga! Dzielenie przez zero!„
b = 1: Resume
End Sub
Kod
Można zastosować jedną z trzech odmian instrukcji Resume:
• Resume
• Resume Next
• Resume etykieta
Skok w miejsce błędu.
Skok do następnej linii za miejscem błędu.
Skok do dowolnej linii od chwili obsłużenia błędu.
P
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
49
Obsługa błędów w VBA c.d.
Zastosowanie instrukcji (Resume etykieta) przy powrocie do miejsca błędu:
Public Sub
Blad4()
Dim
a, b, c
On Error GoTo
Blad
a = InputBox("Podaj wartość a: ")
Wartosc_b:
b = InputBox("Podaj wartość b: ")
c = a / b: MsgBox "Wynik obliczeń: " & c
Exit Sub
Blad:
MsgBox
"Uwaga! Dzielenie przez zero!"
Resume
Wartosc_b
End Sub
Zastosowanie instrukcji (Resume etykieta) przy powrocie do miejsca błędu:
Public Sub
Blad4()
Dim
a, b, c
On Error GoTo
Blad
a = InputBox("Podaj wartość a: ")
Wartosc_b:
b = InputBox("Podaj wartość b: ")
c = a / b: MsgBox "Wynik obliczeń: " & c
Exit Sub
Blad:
MsgBox
"Uwaga! Dzielenie przez zero!"
Resume
Wartosc_b
End Sub
Kod
P
Skok do etykiety przed linią pobierającą dane (ponowne wykonanie kilku poleceń).
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
50
Obsługa błędów w VBA c.d.
Samodzielne definiowanie błędów w przestrzeni numeracyjnej od 1001 do 65535:
Public Sub
Blad5()
Dim
a, b, c
On Error GoTo
Blad
a = InputBox("Podaj wartość a: ")
Wartosc_b:
b = InputBox("Podaj wartość b: ")
If
b = 0 Then Err.Raise 1111,, _
”Wprowadź liczbę różną od zera!”
c = a / b: MsgBox "Wynik obliczeń: " & c
Exit Sub
Blad:
If Err
= 1111 Then
MsgBox Err.Description
Resume
Wartosc_b
End If
End Sub
Samodzielne definiowanie błędów w przestrzeni numeracyjnej od 1001 do 65535:
Public Sub
Blad5()
Dim
a, b, c
On Error GoTo
Blad
a = InputBox("Podaj wartość a: ")
Wartosc_b:
b = InputBox("Podaj wartość b: ")
If
b = 0 Then Err.Raise 1111,, _
”Wprowadź liczbę różną od zera!”
c = a / b: MsgBox "Wynik obliczeń: " & c
Exit Sub
Blad:
If Err
= 1111 Then
MsgBox Err.Description
Resume
Wartosc_b
End If
End Sub
P
Zastosowanie obiektu Err oraz jego metody
Raise z argumentem Description.
Kod
Kod VBA - Podstawy
Visual Basic dla Aplikacji
© Ζ.Ζ.
51
Obsługa błędów w VBA c.d.
Stworzenie uniwersalnego programu obsługi błędów:
Public Sub
Blad6()
Dim
a, b, c
On Error GoTo
Blad
a = InputBox("Podaj wartość a: ")
Wartosc_b:
b = InputBox("Podaj wartość b: ")
c = a / b: MsgBox "Wynik obliczeń: " & c
Exit Sub
Blad:
MsgBox
"Nr błędu: " & Err.Number & _
Chr
(13) & "Opis błędu: " & _
Err.Description
Resume
Wartosc_b
End Sub
Stworzenie uniwersalnego programu obsługi błędów:
Public Sub
Blad6()
Dim
a, b, c
On Error GoTo
Blad
a = InputBox("Podaj wartość a: ")
Wartosc_b:
b = InputBox("Podaj wartość b: ")
c = a / b: MsgBox "Wynik obliczeń: " & c
Exit Sub
Blad:
MsgBox
"Nr błędu: " & Err.Number & _
Chr
(13) & "Opis błędu: " & _
Err.Description
Resume
Wartosc_b
End Sub
P
Kod