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