VBA podstawy

Transkrypt

VBA podstawy
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)
Liczba = Fix(99.2)
Liczba = Int(-99.8)
Liczba = Fix(-99.8)
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod
'Zwróci
'Zwróci
'Zwróci
'Zwróci
Liczba = Int(-99.2)
99.
'Zwróci -100.
99
-100. Liczba = Fix(-99.2)
'Zwróci -99.
–99.
Kod VBA - Podstawy
P
1
Funkcje wbudowane – numeryczne c.d.
Funkcja
Log(liczba)
Opis
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.
Kod
Wartosc1 = 42: Wartosc2 = -2.6: Wartosc3 = 0
Znak = Sgn(Wartosc1) ' Zwraca 1.
Znak = Sgn(Wartosc2) ' Zwraca -1.
P
Znak = Sgn(Wartosc3) ' Zwraca 0.
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
2
Funkcje wbudowane – łańcuchowe
Funkcja
Opis
Chr(kod_znaku) Zwraca wartość typu String zawierającą znak odpowiadający
podanemu kodowi znaku.
P
MojZnak = Chr(65) ' Zwraca A.
Kod
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.
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.
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).
P1
© Ζ.Ζ.
Kod
Lanc1 = MidB(Lanc, 3, 4) ‘Z „ABCD” zwróci „BC”
Visual Basic dla Aplikacji
Kod VBA - Podstawy
3
Funkcje wbudowane – łańcuchowe c.d.
Funkcja
Left(lancuch, _
długość)
Opis
Zwraca wartość typu Variant (String) zawierającą podaną liczbę
znaków począwszy od lewej strony ciągu znaków lancuch.
Right(lancuch, _ Zwraca wartość typu Variant (String) zawierającą podaną liczbę
długość)
znaków począwszy od prawej strony ciągu znaków lancuch.
Len(ciąg |
Zwraca wartość typu Long zawierającą liczbę znaków w ciągu
nazwa_zmiennej) znaków lub liczbę bajtów niezbędnych do przechowania
zmiennej nazwa_zmiennej.
LenB(ciąg |
Zwraca wartość typu Long zawierającą liczbę bajtów w ciągu
nazwa_zmiennej) 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.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
4
Przykłady zastosowań funkcji (Len, LenB)
Kod
Type
Type MojRekord
MojRekord
ID
ID As
As Integer
Integer
Nazwisko
Nazwisko As
As String
String ** 10
10
Notacja DBCS (Double-Byte
Adres
Adres As
As String
String ** 30
30
Character Set )
End
End Type
Type
Private
Private Sub
Sub Lancuchy()
Lancuchy()
Dim
Dim Klient
Klient As
As MojRekord
MojRekord
Dim
Dim MyInt
MyInt As
As Integer,
Integer, MyCur
MyCur As
As Currency
Currency
Dim
Dim MyString,
MyString, MyLen,
MyLen, MyStr
MyStr
MyString
MyString == "Hello
"Hello World":
World": MyStr
MyStr == "Abc"
"Abc"
MyLen
'Zwraca
MyLen == Len(MyInt)
Len(MyInt)
'Zwraca 2.
2.
MyLen
'Zwraca
MyLen == Len(Klient)
Len(Klient)
'Zwraca 42.
42.
MyLen
'Zwraca
MyLen == Len(MyString)
Len(MyString)
'Zwraca 11.
11.
MyLen
'Zwraca
MyLen == Len(MyCur)
Len(MyCur)
'Zwraca 8.
8.
MyLen
'Zwraca
MyLen == LenB(MyStr)
LenB(MyStr)
'Zwraca 6.
6.
End
End Sub
Sub
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
P
5
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.
compare
vbUseCompareOption
-1 Pobiera opcje porównywania z ustawień
Option Compare.
vbBinaryCompare
0
Porównywanie binarne.
vbTextCompare
1
Porównywanie tekstowe.
vbDatabaseCompare
2
Porównywanie oparte na informacji
znajdującej się w bazie MS Access.
Pozycja deklaracji na początku modułu:
Option Compare {Binary | Text | Database}
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
6
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
Tekstowe
SearchString ="XXpXXpXXPXXP"
Binarne
SearchChar = "P"
MyPos = InStr(4, SearchString, SearchChar, 1) 'Zwraca
MyPos = InStr(1, SearchString, SearchChar, 0) 'Zwraca
MyPos = InStr(SearchString, SearchChar)
'Zwraca
MyPos = InStr(1, SearchString, "W")
'Zwraca
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
Kod
6.
9.
9.
0.
P
7
Przykłady zastosowań funkcji łańcuchowych
Kod
Public
Public Function
Function WymianaZnaku(x,x1,x2)
WymianaZnaku(x,x1,x2)
Znak do
Dim
Dim pp As
As Long
Long
wstawienia
Znak
Dim
szukany
Dim s1
s1 As
As String,
String, s2
s2 As
As String
String
pp == InStr(1,
InStr(1, x,
x, x1,
x1, 1)
1)
Lańcuch
przeszukiwany
If
If pp == 00 Then
Then
WymianaZnaku
WymianaZnaku == xx
Exit
Exit Function
Function
End
End If
If
s1
s1 == Left(x,
Left(x, pp -- 1)
1)
s2
s2 == Right(x,
Right(x, Len(x)
Len(x) -- p)
p)
WymianaZnaku
WymianaZnaku == s1
s1 && x2
x2 && s2
s2
End
End Function
Function
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
8
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.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
9
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
General Number
Wyświetla liczbę bez separatora tysięcy.
Currency
Wyświetla liczbę z separatorem tysięcy. Formatowanie oparte na
ustawieniach lokalnych w systemie.
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.
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
10
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
0
Wyświetla niesformatowaną liczbę.
Znak pola. Wyświetla cyfrę lub zero. Nadmiar z lewej strony jest
wyświetlany, natomiast z prawej strony jest obcinany.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
11
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.
:
/
E+ Ee+ e-+$()
© Ζ.Ζ.
Separator czasu. Oddziela od siebie godziny, minuty i sekundy.
Separator daty. Oddziela od siebie dzień, miesiąc i rok.
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.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
12
Znaki formatów funkcji (Format) c.d.
Znak
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, @, &, <, >, !).
\
””
Łańcuchowe
© Ζ.Ζ.
Opis
@
&
<
>
!
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.
Powoduje wypełnianie miejsc na znaki od lewej do prawej.
Standardowo są wypełniane od prawej do lewej.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
13
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.
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
14
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).
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
15
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
s
ss
Wyświetla minuty jako liczbę z zerem na początku (od 00 do 59).
Wyświetla sekundy jako liczbę bez zera na początku (od 0 do 59).
Wyświetla sekundy jako liczbę z zerem na początku (od 00 do 59).
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
16
Przykłady zastosowań funkcji (Format)
Przykład:
Przykład:
Dim
Dim MyTime,
MyTime, MyDate,
MyDate, MyStr
MyStr
MyTime
MyTime == #17:04:23#
#17:04:23#
MyDate
MyDate == #January
#January 27,
27, 1993#
1993#
MyStr
MyStr == Format(Time,
Format(Time, "Long
"Long Time")
Time")
‘Zwraca
‘Zwraca bieżący
bieżący systemowy
systemowy czas
czas
‘w
‘w długim
długim formacie.
formacie.
MyStr
MyStr == Format(Date,
Format(Date, "Long
"Long Date")
Date")
‘Zwraca
‘Zwraca bieżącą
bieżącą systemową
systemową datę
datę
‘w
‘w długim
długim formacie.
formacie.
MyStr
MyStr == Format(MyTime,
Format(MyTime, "h:m:s")
"h:m:s")
‘Zwraca
‘Zwraca "17:4:23".
"17:4:23".
MyStr
MyStr == Format(MyTime,
Format(MyTime, "hh:mm:ss
"hh:mm:ss AMPM")
AMPM")
‘Zwraca
‘Zwraca "05:04:23
"05:04:23 PM".
PM".
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
Kod
P
17
Przykłady zastosowań funkcji (Format) c.d.
Przykład:
Przykład:
Kod
MyStr
MyStr == Format(MyDate,
Format(MyDate, "dddd,
"dddd, mmm
mmm dd yyyy")
yyyy")
'Zwraca
'Zwraca „środa,
„środa, sty
sty 27
27 1993".
1993".
MyStr
MyStr == Format(23)
Format(23)
'Zwraca
'Zwraca "23".
"23".
MyStr
MyStr == Format(5459.4,
Format(5459.4, "##,##0.00")
"##,##0.00")
'Zwraca
'Zwraca "5
"5 459,40".
459,40".
MyStr
MyStr == Format(334.9,
Format(334.9, "###0.00")
"###0.00")
MyStr
MyStr == Format(5,
Format(5, "0.00%")
"0.00%")
'Zwraca
'Zwraca "500,00%".
"500,00%".
MyStr
MyStr == Format("HELLO",
Format("HELLO", "<")
"<")
'Zwraca
'Zwraca "hello".
"hello".
MyStr
MyStr == Format("To
Format("To jest
jest to",
to", ">")
">")
'Zwraca
P
P1
'Zwraca „TO
„TO JEST
JEST TO".
TO".
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
18
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.
Zwraca wartość typu Variant (Integer), która jest liczbą
całkowitą z przedziału od 0 do 59 włącznie.
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.
Hour(godzina)
Day(data)
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
19
Funkcje daty i czasu c.d.
Funkcja
Opis
Weekday(data,
Zwraca wartość typu Variant (Integer) zawierającą liczbę
[pierwszydzientygodn całkowitą określającą dzień tygodnia. Od 1 do 7.
ia])
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ę.
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
20
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
Wartość domyślna
Dim Msg
MojaData = InputBox("Wprowadź datę:", "Data", Date)
Msg = "Mamy kwartał nr: " & DatePart("q", MojaData)
MsgBox Msg
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
Kod
P
P1
21
Przykład zastosowania funkcji (Timer)
Dim
Dim Intr
Intr As
As Boolean
Boolean
Public
Public Sub
Sub TimerShow(S
TimerShow(S As
As Single)
Single)
Dim
Dim Start
Start
Do
Do
Label1.Caption
Label1.Caption == Timer
Timer
DoEvents
DoEvents
Call
Call Delay(S)
Delay(S)
Loop
Loop Until
Until Intr
Intr == False
False
End
End Sub
Sub
Public
Public Sub
Sub Delay(Time1
Delay(Time1 As
As Single)
Single)
Dim
Dim Start
Start
Start
Start == Timer
Timer
Do
Do
DoEvents
DoEvents
Loop
Loop Until
Until Timer
Timer -- Start
Start >> Time1
Time1
End
End Sub
Sub
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
Kod
22
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 Zwraca wartość typu Boolean wskazującą, czy zmienna została
e)
zainicjowana.
IsMissing(nazwa_ Zwraca wartość Boolean wskazującą, czy argument
argumentu)
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 Zwraca wartość typu Boolean wskazującą, czy wartością
nie)
wyrażenia jest liczba.
IsObject(identyfik Zwraca wartość typu Boolean wskazującą, czy identyfikator
ator)
reprezentuje zmienną obiektową.
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
23
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.
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
24
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.
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
25
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.
Kod
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.
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
26
Funkcje konwersji danych c.d.
Kod
Dim
Dim MyDate,
MyDate, MyShortDate,
MyShortDate, MyTime,
MyTime, MyShortTime
MyShortTime
MyDate
'Zdefiniowanie
MyDate == "12
"12 luty
luty 1969"
1969"
'Zdefiniowanie daty.
daty.
MyShortDate
'Konwersja
MyShortDate == CDate(MyDate)
CDate(MyDate)
'Konwersja do
do typu
typu Date.
Date.
MyTime
'Zdefiniowanie
MyTime == "4:35:47
"4:35:47 PM"
PM"
'Zdefiniowanie czasu.
czasu.
MyShortTime
'Konwersja
MyShortTime == CDate(MyTime)
CDate(MyTime)
'Konwersja do
do typu
typu Date.
Date.
Dim
Dim MyInt,
MyInt, MyVar
MyVar
MyInt
MyInt == 4534
4534
MyVar
MyVar == CVar(MyInt
CVar(MyInt && "000")
"000")
'MyInt
'MyInt jest
jest typu
typu Integer.
Integer.
'MyVar
'MyVar zawiera
zawiera łańcuch
łańcuch
'4534000.
'4534000.
Dim
Dim MyDouble,
MyDouble, MyString
MyString
MyDouble
'MyDouble
MyDouble == 437.324
437.324
'MyDouble jest
jest typu
typu Double.
Double.
MyString
MyString == CStr(MyDouble)
CStr(MyDouble) 'MyString
'MyString zawiera
zawiera "437.324".
"437.324".
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
27
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).
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
28
Instrukcje operacji wejścia/wyjścia c.d.
Typy dostępu do pliku operacji Open:
Sekwencyjny
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 #.
Tryb
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 #.
Swobodny
Random - odczyt i zapis danych – rekordowych.
Binarny
Binary - odczyt i zapis porcji bajtów do pliku.
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
29
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
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
30
Instrukcje operacji wejścia/wyjścia c.d.
Kod
Type
'Zdefiniowanie
Type Record
Record
'Zdefiniowanie własnego
własnego typu
typu rekordowego.
rekordowego.
ID
ID As
As Integer
Integer
Name
Name As
As String
String ** 20
20
End
End Type
Type
Dim
Dim MyRecord
MyRecord As
As Record
Record 'Deklaracja
'Deklaracja zmiennej
zmiennej rekordowej.
rekordowej.
Open
Open „test.txt"
„test.txt" For
For Random
Random As
As #1
#1 Len
Len == Len(MyRecord)
Len(MyRecord)
Close
Close #1
#1
Open
Open „test.txt"
„test.txt" For
For Output
Output Shared
Shared As
As #1
#1 'Dowolny
'Dowolny proces
proces
'może
'może zapisywać
zapisywać lub
lub odczytywać
odczytywać ze
ze zbioru
zbioru „TESTFILE”.
„TESTFILE”.
Close
Close #1
#1
Open
Open „test.txt"
„test.txt" For
For Binary
Binary Access
Access Read
Read Lock
Lock Read
Read As
As #1
#1
''Binarne
Binarne otwarcie
otwarcie ww trybie
trybie odczytu.
odczytu. Inne
Inne procesy
procesy nie
nie
'mają
'mają dostępu.
dostępu.
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
31
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.
Kod
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
© Ζ.Ζ.
Visual Basic dla Aplikacji
P
Kod VBA - Podstawy
S
32
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.
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
33
Instrukcje operacji wejścia/wyjścia c.d.
Kod
Open
Open „test1.txt"
„test1.txt" For
For Output
Output As
As #1
#1
Print
Print #1,
#1, "To
"To tylko
tylko test"
test"
Print
’Wydruk
Print #1,
#1,
’Wydruk pustej
pustej linii
linii do
do zbioru.
zbioru.
Print
Print #1,
#1, "Zone
"Zone 1";
1"; Tab
Tab ;; "Zone
"Zone 2"
2" ‘Dwie
‘Dwie strefy
strefy druku.
druku.
Print
‘Spacja.
Print #1,
#1, "Hello"
"Hello" ;; "" "" ;; "World"
"World"
‘Spacja.
Print
Print #1,
#1, Spc(5)
Spc(5) ;; "5
"5 przednich
przednich spacji
spacji "" ‘Pięć
‘Pięć spacji.
spacji.
Print
‘Druk
Print #1,
#1, Tab(10)
Tab(10) ;; "Hello"
"Hello"
‘Druk ww kolumnie
kolumnie nr
nr 10.
10.
Dim
Dim MyBool,
MyBool, MyDate,
MyDate, MyNull,
MyNull, MyError
MyError
MyBool
MyBool == False
False :: MyDate
MyDate == #7/20/1969#
#7/20/1969#
MyNull
MyNull == Null
Null :: MyError
MyError == CVErr(32767)
CVErr(32767)
Print
Print #1,
#1, MyBool
MyBool ;; "" jest
jest wartością
wartością typu
typu Boolean"
Boolean"
Print
Print #1,
#1, MyDate
MyDate ;; "" jest
jest datą"
datą"
Print
Print #1,
#1, MyNull
MyNull ;; "" posiada
posiada wartość
wartość null"
null"
Print
Print #1,
#1, MyError
MyError ;; "" określa
określa numer
numer błędu"
błędu"
P
Close
Close #1
#1
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
S
34
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.
Kod
Open "test2.txt" For Output As #1
Write #1, "Dane zapisane do pliku", 234
Write #1,
'Zapisz pusty wiersz.
Print #1, Spc(5) ; "5 znaków spacji "
Print #1, Tab(10) ; "Cześć" 'Drukuj słowo w 10 kolumnie.
Close #1
© Ζ.Ζ.
Visual Basic dla Aplikacji
'Zamknij plik.
Kod VBA - Podstawy
S
P
35
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.
Kod
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
P
Close #1
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
S
36
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.
Kod
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
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
S
P
37
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.
Kod
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
P
Close #1
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
S
38
Polecenia operacji na plikach i katalogach
Polecenie
ChDir
Zmienia bieżący katalog
ChDrive
Zmienia bieżący napęd
Dir
FileCopy
Zwraca nazwę pliku lub katalog pasujący do określonego wzorca
lub atrybutu pliku
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
© Ζ.Ζ.
Opis działania
Visual Basic dla Aplikacji
Kod VBA - Podstawy
39
Funkcje sprawdzające - przykłady
Zwrócenie przez funkcję Dir pustego ciągu znaków oznacza, że nie można
znaleźć poszukiwanego pliku.
Kod
Function FileExists(nazwa) As Boolean
FileExists = Dir(nazwa) <> ””
End Function
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).
Kod
Function PathExists(nazwa) As Boolean
PathExists = (GetAttr(nazwa) and vbDirectory) _
= vbDirectory
End Function
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
40
Lista plików w katalogu
Kod
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
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
41
Instrukcja dla skróconego wywołania (With)
Składnia:
Składnia:
With
Withobiekt
obiekt
.Podprogram.Wlasciwosc
.Podprogram.Wlasciwosc
[instrukcje]
[instrukcje]
End
EndWith
With
Równoważne podprogramy
Kod
With MojObiekt
.Height = 100
.Caption ="Pozdrawiam"
With .Font
.Color = Czerwony
.Bold = True
End With
End With
© Ζ.Ζ.
Visual Basic dla Aplikacji
MojObiekt.Height = 100
MojObiekt.Caption = "Pozdrawiam"
MojObiekt.Font.Color = Czerwony
MojObiekt.Font.Bold = True
Kod VBA - Podstawy
42
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
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
Kod
Sprawdzenie czy plik istnieje
(od Office 97) ?
43
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
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
Kod
44
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
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
45
Obsługa błędów w VBA c.d.
Przykład
Przykładwygenerowanego
wygenerowanegobłędu
błędupodczas
podczasdziałania
działaniaprocedury:
procedury:
Public
Public Sub
Sub Blad1()
Blad1()
Dim
Dim a,
a, b,
b, cc
aa == InputBox("Podaj
InputBox("Podaj wartość
wartość a:
a: ")
")
bb == InputBox("Podaj
InputBox("Podaj wartość
wartość b:
b: ")
")
cc == aa // b:
b: MsgBox
MsgBox "Wynik
"Wynik obliczeń:
obliczeń: "" && cc
End
End Sub
Sub
Numer wygenerowanego błędu
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
Kod
P
46
Obsługa błędów w VBA c.d.
Zastosowanie
Zastosowanieinstrukcji
instrukcjiOn
OnError
Errorwwzabezpieczeniu
zabezpieczeniuprzed
przedbłędami:
błędami:
Kod
Public
Sub
Blad2()
Public Sub Blad2()
Dim
Dim a,
a, b,
b, cc
W chwili błędu, wyjście z
On
Error
GoTo
Blad
On Error GoTo Blad
podprogramu.
aa == InputBox("Podaj
wartość
a:
")
InputBox("Podaj wartość a: ")
bb == InputBox("Podaj
InputBox("Podaj wartość
wartość b:
b: ")
")
cc == aa // b:
b: MsgBox
MsgBox "Wynik
"Wynik obliczeń:
obliczeń: "" && cc
Exit
Exit Sub
Sub
Blad:
Blad:
MsgBox
MsgBox "Uwaga!
"Uwaga! Dzielenie
Dzielenie przez
przez zero!"
zero!"
End
End Sub
Sub
Zabezpieczenie przed wszystkimi błędami.
Komunikat w ogólności może być nieprawidłowy.
P
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
47
Obsługa błędów w VBA c.d.
Zastosowanie
Zastosowanieinstrukcji
instrukcjiResume
Resumeprzy
przypowrocie
powrociedo
domiejsca
miejscabłędu:
błędu:
Kod
Public
Sub
Blad3()
Public Sub Blad3()
Dim
Dim a,
a, b,
b, cc
On
On Error
Error GoTo
GoTo Blad
Blad
aa == InputBox("Podaj
InputBox("Podaj wartość
wartość a:
a: ")
")
bb == InputBox("Podaj
InputBox("Podaj wartość
wartość b:
b: ")
")
cc == aa // b:
b: MsgBox
MsgBox "Wynik
"Wynik obliczeń:
obliczeń: "" && cc
Exit
Exit Sub
Sub
Blad:
Blad:
MsgBox
MsgBox "Uwaga!
"Uwaga! Dzielenie
Dzielenie przez
przez zero!„
zero!„
bb == 1:
1: Resume
Resume
End
End Sub
Sub
Można zastosować jedną z trzech odmian instrukcji Resume:
• Resume
Skok w miejsce błędu.
Skok do następnej linii za miejscem błędu.
• Resume Next
Skok do dowolnej linii od chwili obsłużenia błędu.
• Resume etykieta
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
P
48
Obsługa błędów w VBA c.d.
Zastosowanie
Zastosowanieinstrukcji
instrukcji(Resume
(Resumeetykieta)
etykieta)przy
przypowrocie
powrociedo
domiejsca
miejscabłędu:
błędu:
Kod
Public
Sub
Blad4()
Public Sub Blad4()
Dim
Dim a,
a, b,
b, cc
On
On Error
Error GoTo
GoTo Blad
Blad
aa == InputBox("Podaj
InputBox("Podaj wartość
wartość a:
a: ")
")
Wartosc_b:
Wartosc_b:
bb == InputBox("Podaj
InputBox("Podaj wartość
wartość b:
b: ")
")
cc == aa // b:
b: MsgBox
MsgBox "Wynik
"Wynik obliczeń:
obliczeń: "" && cc
Exit
Exit Sub
Sub
Blad:
Blad:
MsgBox
MsgBox "Uwaga!
"Uwaga! Dzielenie
Dzielenie przez
przez zero!"
zero!"
Resume
Resume Wartosc_b
Wartosc_b
End
End Sub
Sub
Skok do etykiety przed linią pobierającą dane (ponowne wykonanie kilku poleceń).
P
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
49
Obsługa błędów w VBA c.d.
Samodzielne
Samodzielnedefiniowanie
definiowaniebłędów
błędówwwprzestrzeni
przestrzeninumeracyjnej
numeracyjnejod
od1001
1001do
do65535:
65535:
Kod
Public
Sub
Blad5()
Public Sub Blad5()
Dim
Dim a,
a, b,
b, cc
On
On Error
Error GoTo
GoTo Blad
Blad
aa == InputBox("Podaj
InputBox("Podaj wartość
wartość a:
a: ")
")
Wartosc_b:
Wartosc_b:
bb == InputBox("Podaj
InputBox("Podaj wartość
wartość b:
b: ")
")
If
If bb == 00 Then
Then Err.Raise
Err.Raise 1111,,
1111,, __
”Wprowadź
”Wprowadź liczbę
liczbę różną
różną od
od zera!”
zera!”
cc == aa // b:
b: MsgBox
MsgBox "Wynik
"Wynik obliczeń:
obliczeń: "" && cc
Exit
Exit Sub
Sub
Blad:
Blad:
If
If Err
Err == 1111
1111 Then
Then
MsgBox
MsgBox Err.Description
Err.Description
Resume
Resume Wartosc_b
Wartosc_b
End
Zastosowanie obiektu Err oraz jego metody
End If
If
End
End Sub
Sub
Raise z argumentem Description.
P
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
50
Obsługa błędów w VBA c.d.
Stworzenie
Stworzenieuniwersalnego
uniwersalnegoprogramu
programuobsługi
obsługibłędów:
błędów:
Public
Public Sub
Sub Blad6()
Blad6()
Dim
Dim a,
a, b,
b, cc
On
On Error
Error GoTo
GoTo Blad
Blad
aa == InputBox("Podaj
InputBox("Podaj wartość
wartość a:
a: ")
")
Wartosc_b:
Wartosc_b:
bb == InputBox("Podaj
InputBox("Podaj wartość
wartość b:
b: ")
")
cc == aa // b:
b: MsgBox
MsgBox "Wynik
"Wynik obliczeń:
obliczeń: "" && cc
Exit
Exit Sub
Sub
Blad:
Blad:
MsgBox
MsgBox "Nr
"Nr błędu:
błędu: "" && Err.Number
Err.Number && __
Chr(13)
Chr(13) && "Opis
"Opis błędu:
błędu: "" && __
Err.Description
Err.Description
Resume
Resume Wartosc_b
Wartosc_b
End
End Sub
Sub
Kod
P
© Ζ.Ζ.
Visual Basic dla Aplikacji
Kod VBA - Podstawy
51