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