Funkcja Abs(liczba) Atn(liczba) Cos(liczba) Exp(liczba) Int(liczba) Fix(liczba) Funkcje wbudowane - numeryczne Opis Zwraca bezwzględną wartość argumentu. Zwracana wartość jest tego samego typu co argument funkcji. Zwraca wartość typu Double równą arcusowi tangensowi liczby. Funkcja zwraca wartość typu Double odpowiadającą cosinusowi kąta podanego w radianach. Funkcja zwraca wartość typu Double równą stałej e (podstawa logarytmu naturalnego) podniesionej do potęgi liczba. Funkcje zwracają wartości tego samego typu co przekazany argument. Wartość funkcji odpowiada części całkowitej argumentu. 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. Fix(liczba) = Sgn(liczba) * Int(Abs(liczba)) Liczba = Int(-99.2) 'Zwróci -100. Liczba = Fix(-99.2) 'Zwróci -99. 1 P
Funkcja Log(liczba) Rnd[(liczba)] Sin(liczba) Sqr(liczba) Tan(liczba) Funkcje wbudowane numeryczne c.d. Opis Zwraca wartość typu Double równą logarytmowi naturalnemu liczby. Zwraca wartość typu Single będącą liczbą losową. Randomize [liczba] - Inicjuje generator liczb losowych. Zwraca wartość typu Double równą sinusowi kąta podanego w radianach. Zwraca wartość typu Double równą pierwiastkowi kwadratowemu z liczby. 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. 2 P
Funkcje wbudowane łańcuchowe Funkcja Chr(kod_znaku) LCase(ciąg) UCase(ciąg) LTrim(ciąg) RTrim(ciąg) Trim(ciąg) P Mid(string, _ start[, długość]) MidB(string, _ start[, długość]) P1 Opis Zwraca wartość typu String zawierającą znak odpowiadający podanemu kodowi znaku. MojZnak = Chr(65) ' Zwraca A. Zwraca wartość typu String zamienioną na małe litery. Zwraca wartość typu Variant (String) zawierającą podany ciąg zamieniony na wielkie litery. Obcina spacje początkowe w łańcuchu ciąg. Obcina spacje końcowe w łańcuchu ciąg. Obcina spacje początkowe i końcowe w łańcuchu ciąg. Zwraca wartość typu Variant (String) zawierającą podaną liczbę znaków z ciągu znaków. 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 3
Funkcje wbudowane łańcuchowe c.d. Funkcja Left(lancuch, _ długość) Right(lancuch, _ długość) Len(ciąg nazwa_zmiennej) LenB(ciąg nazwa_zmiennej) InStr([start, ] string1, string2 [,compare]) Opis Zwraca wartość typu Variant (String) zawierającą podaną liczbę znaków począwszy od lewej strony ciągu znaków lancuch. Zwraca wartość typu Variant (String) zawierającą podaną liczbę znaków począwszy od prawej strony ciągu znaków lancuch. 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. 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). Zwraca wartość typu Variant (Long) określającą miejsce pierwszego wystąpienia jednego ciągu znaków w drugim. 4
Przykłady zastosowań funkcji (Len, LenB) Type MojRekord ID ID As As Integer Nazwisko As As String * 10 10 Adres As As String * 30 Notacja DBCS (Double-Byte 30 End End Type Character Set ) Private Sub Sub Lancuchy() Dim Dim Klient As As MojRekord Dim Dim MyInt As As Integer, MyCur As As Currency Dim Dim MyString, MyLen, MyStr MyString = "Hello World": MyStr = "Abc" MyLen = Len(MyInt) 'Zwraca 2. 2. MyLen = Len(Klient) 'Zwraca 42. 42. MyLen = Len(MyString) 'Zwraca 11. 11. MyLen = Len(MyCur) 'Zwraca 8. 8. MyLen = LenB(MyStr) 'Zwraca 6. 6. End End Sub Sub P 5
Składnia funkcji (InStr) InStr([start, ] string1, string2 [,compare]) start string1 string2 compare Określa pozycję początkową poszukiwań w łańcuchu string1, parametr jest wymagany przy określeniu wartości compare. Element obowiązkowy. Łańcuch przeszukiwany. Element obowiązkowy. Łańcuch lub znak poszukiwany. 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} 6
Przykłady zastosowań funkcji (InStr) Zwracane wartości funkcji - InStr([start, ] string1, string2 [,compare]) Warunek string1 posiada zerową długość 0 string1 posiada wartość Null string2 posiada wartość zerową string2 posiada wartość Null string2 nie został znaleziony 0 string2 został znaleziony w string1 start > string2 0 Zwrócona wartość 7 Null start Null Pozycja w której został odszukany Dim SearchString, SearchChar, MyPos Tekstowe SearchString ="XXpXXpXXPXXP" SearchChar = "P" MyPos = InStr(4, SearchString, SearchChar, 1) Binarne 'Zwraca 6. MyPos = InStr(1, SearchString, SearchChar, 0) 'Zwraca 9. MyPos = InStr(SearchString, SearchChar) 'Zwraca 9. MyPos = InStr(1, SearchString, "W") 'Zwraca 0. P
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 Znak szukany Lańcuch przeszukiwany Znak do wstawienia 8
Składnia funkcji (Format) Format(Wyrażenie[, Format[, PierwszyDzienTygodnia[, PierwszyTydzienRoku]]]) Wyrażenie Format PierwszyDzienTygodnia PierwszyTydzienRoku Liczba sekcji Element obowiązkowy. Dowolne poprawne wyrażenie. Element opcjonalny. Nazwa lub zdefiniowane przez użytkownika wyrażenie formatujące. Element opcjonalny. Opcjonalna wartość lub stała określająca pierwszy dzień tygodnia. Element opcjonalny. Opcjonalna wartość lub stała określająca pierwszy tydzień roku. Różne formaty dla różnych wartości numerycznych 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. 9
Liczba sekcji Formaty dla funkcji (Format) Różne formaty dla różnych wartości łańcuchowych 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 ( ). Nazwa formatu General Number Currency Fixed Standard Zdefiniowane formaty numeryczne Opis Wyświetla liczbę bez separatora tysięcy. Wyświetla liczbę z separatorem tysięcy. Formatowanie oparte na ustawieniach lokalnych w systemie. Wyświetla przynajmniej jedną cyfrę od lewej i dwie cyfry od prawej strony separatora dziesiętnego. Wyświetla liczbę z separatorem tysięcy, przynajmniej jedną cyfrę od lewej i dwie cyfry od prawej strony separatora dziesiętnego. 10
Nazwa formatu Formaty dla funkcji (Format) c.d. Opis Percent Wyświetla liczbę pomnożoną przez 100 ze znakiem procentu (%). Wyświetla dwie cyfry po prawej stronie separatora dziesiętnego. Scientific Yes/No True/False On/Off Używa standardowego formatu wykładniczego. Wyświetla nie (No), jeśli liczba jest 0, w przeciwnym przypadku wyświetla tak (Yes). Wyświetla False (fałsz), jeśli liczba jest 0, w przeciwnym przypadku wyświetla True (prawda). Wyświetla Off, jeżeli liczba jest 0, w przeciwnym wypadku On. Znaki formatów numerycznych i łańcuchowych użytkownika Znak None Opis 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. 11
Znak Znaki formatów funkcji (Format) 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. 12
Łańcuchowe Znak Znaki formatów funkcji (Format) c.d. 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. Powoduje wypełnianie miejsc na znaki od lewej do prawej. Standardowo są wypełniane od prawej do lewej. 13
Formatowanie daty i czasu funkcją (Format) Nazwa formatu General Date Long Date Long Time Medium Date Medium Time Zdefiniowane nazwy formatów daty i czasu Opis Wyświetlanie określone jest ustawieniami systemu. Wyświetla datę według formatu długiej daty ustawionego przez system. Wyświetla czas według formatu długiego czasu ustawionego przez system. Wyświetla datę według formatu średniej daty odpowiedniego do wersji języka aplikacji typu host. Wyświetla czas w formacie 12-godzinnym. Short Date Short Time Wyświetla datę według formatu krótkiej daty, ustawionego przez system. Wyświetla czas w formacie 24-godzinnym. 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). 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 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). 16
Przykład: Przykłady zastosowań funkcji (Format) Dim MyTime, MyDate, MyStr MyTime = #17:04:23# MyDate = #January 27, 1993# MyStr = Format(Time, "Long Time") Zwraca bieżący systemowy czas w w długim formacie. MyStr = Format(Date, "Long Date") Zwraca bieżącą systemową datę w 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". P 17
Przykład: Przykłady zastosowań funkcji (Format) c.d. 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". P P1 18
Funkcje daty i czasu Funkcja Date Time Now Second(godzina) Minute(godzina) Hour(godzina) Day(data) Opis Zwraca wartość typu (Date) zawierającą bieżącą datę systemową. Zwraca wartość typu (Date) zawierającą bieżącą godzinę systemową. Zwraca wartość typu (Date) określającą bieżącą datę i godzinę systemową pobraną. 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 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. 19
Funkcje daty i czasu c.d. Funkcja Weekday(data, [pierwszydzientygodn ia]) Month(data) Year(data) DateSerial(year, month, day) TimeSerial(hour, minute, second) DateValue(data) TimeValue(godzina) Opis Zwraca wartość typu Variant (Integer) zawierającą liczbę całkowitą określającą dzień tygodnia. Od 1 do 7. 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. Zwraca wartość typu Variant (Integer) zawierającą liczbę całkowitą, określającą rok. Zwraca wartość typu Variant (Date) dla określonego roku, miesiąca i dnia. Zwraca wartość typu Variant (Date) zawierającą określenie czasu dla konkretnej godziny, minuty i sekundy. Zwraca wartość typu Variant (Date). Zwraca wartość typu Variant (Date) zawierającą godzinę. 20
Funkcja DateAdd(jednostki_d, ilość_jed, data) DateDiff(jednostki_d, data1, data2 [,pierwszydzientygodnia [, pierwszytydzienroku]]) DatePart(jednostki_d, date [,pierwszydzientygodnia [, pierwszytydzienroku]]) Timer Funkcje daty i czasu c.d. Opis Zwraca wartość typu Variant (Date) zawierającą datę, do której dodano określony przedział czasu. Zwraca wartość typu Variant (Long) określającą liczbę przedziałów czasowych pomiędzy dwiema datami. Jednostki_d określają rodzaj jednostek. Zwraca wartość typu Variant (Integer) zawierającą określoną część podanej daty. 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 21 P P1
Przykład zastosowania funkcji (Timer) Dim Intr As As Boolean Public Sub TimerShow(S As As Single) Dim Start Do Do Label1.Caption = Timer DoEvents Call Delay(S) Loop Until Intr = False End Sub Public Sub Delay(Time1 As As Single) Dim Start Start = Timer Do Do DoEvents Loop Until Timer - Start > Time1 End Sub 22
Funkcja IsDate(wyrażenie) IsArray(nazwa_z miennej) IsEmpty(wyrażeni e) IsMissing(nazwa_ argumentu) Funkcje testujące Opis Zwraca wartość typu Boolean wskazującą, czy wyrażenie może zostać przekształcone na wartość oznaczającą datę. Zwraca wartość typu Boolean wskazującą, czy argument jest zmienną prostą czy tablicą. Zwraca wartość typu Boolean wskazującą, czy zmienna została zainicjowana. 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) IsObject(identyfik ator) Zwraca wartość typu Boolean wskazującą, czy wartością wyrażenia jest liczba. Zwraca wartość typu Boolean wskazującą, czy identyfikator reprezentuje zmienną obiektową. 23
Funkcje konwersji danych Funkcja Str(liczba) Val(ciąg) Asc(ciąg) Hex(liczba) Oct(liczba) CBool(wyrażenie) CByte(wyrażenie) Opis Zwraca wartość typu String reprezentującą liczbę. Zwraca wartości liczb tworzących ciąg w postaci wartości numerycznej odpowiedniego typu. Zwraca wartość typu Integer odpowiadającą kodowi znaku pierwszego elementu w ciągu znaków. Zwraca wartość typu String reprezentującą heksadecymalną (szesnastkową) wartość liczby. Zwraca wartość typu Variant (String) reprezentującą oktetową (ósemkową) wartość liczby. Zwraca wartość typu Boolean. Konwersja dowolnego typu na logiczny. Zwraca wartość typu Byte. Konwersja dowolnego typu na typ Byte. 24
Funkcje konwersji danych c.d. Funkcja CCur(wyrażenie) CDate(wyrażenie) CDbl(wyrażenie) CDec(wyrażenie) CInt(wyrażenie) CLng(wyrażenie) CSng(wyrażenie) Opis Zwraca wartość typu Currency. Konwersja dowolnego typu na typ Currency. Zwraca wartość typu Date. Konwersja dowolnego poprawnego wyrażenia oznaczającego datę na typ Date. Zwraca wartość typu Double. Konwersja dowolnego typu z poprawną wartością na typ Double. Zwraca wartość typu Decimal. Konwersja dowolnego typu z poprawną wartością na typ Decimal. Zwraca wartość typu Integer. Konwersja dowolnego typu z poprawną wartością na typ Integer. Zwraca wartość typu Long. Konwersja dowolnego typu z poprawną wartością na typ Long. Zwraca wartość typu Single. Konwersja dowolnego typu z poprawną wartością na typ Single. 25
Funkcje konwersji danych c.d. Funkcja CVar(wyrażenie) CStr(wyrażenie) Opis Zwraca wartość typu Variant. Konwersja dowolnego typu z poprawną wartością na typ Variant. 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. 26
Funkcje konwersji danych c.d. Dim Dim MyDate, MyShortDate, MyTime, MyShortTime MyDate = "12 "12 luty 1969" 'Zdefiniowanie daty. MyShortDate = CDate(MyDate) 'Konwersja do do typu Date. MyTime = "4:35:47 PM" PM" 'Zdefiniowanie czasu. MyShortTime = CDate(MyTime) 'Konwersja do do typu Date. Dim Dim MyInt, MyVar MyInt = 4534 'MyInt jest typu Integer. MyVar = CVar(MyInt & "000") 'MyVar zawiera łańcuch '4534000. Dim Dim MyDouble, MyString MyDouble = 437.324 'MyDouble jest typu Double. MyString = CStr(MyDouble) 'MyString zawiera "437.324". 27
Instrukcje operacji wejścia/wyjścia Open nazwa_sciezki For tryb [Access dostep] [blokada] As [#]numer_pliku [Len=dlugosc_rekordu] Nazwa_sciezki tryb dostep blokada numer_pliku dlugosc_rekor du Element obowiązkowy. Wyrażenie znakowe określające nazwę pliku może zawierać nazwę katalogu lub folderu i dysku. Element obowiązkowy. Słowo kluczowe określające tryb otwarcia pliku: Append, Binary, Input, Output lub Random. Element nieobowiązkowy. Słowo kluczowe określające dozwolone operacje na otwartym pliku: Read, Write lub Read Write. 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. Element obowiązkowy. Numer pliku z zakresu 1 do 511 włącznie. Następny wolny numer pliku - wykorzystanie funkcji FreeFile. Element nieobowiązkowy. Liczba mniejsza lub równa 32 767 (bajtów). 28
Instrukcje operacji wejścia/wyjścia c.d. Typy dostępu do pliku operacji Open: Sekwencyjny Swobodny Binarny Tryb 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. 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. 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 30
Instrukcje operacji wejścia/wyjścia c.d. Type Record 'Zdefiniowanie własnego typu rekordowego. ID ID As As Integer Name As As String * 20 20 End End Type Dim Dim MyRecord As As Record 'Deklaracja zmiennej rekordowej. Open test.txt" For For Random As As #1 #1 Len Len = Len(MyRecord) Close #1 #1 Open test.txt" For For Output Shared As As #1 #1 'Dowolny proces 'może zapisywać lub lub odczytywać ze ze zbioru TESTFILE. Close #1 #1 Open test.txt" For For Binary Access Read Lock Read As As #1 #1 'Binarne otwarcie w trybie odczytu. Inne procesy nie nie 'mają 'mają dostępu. 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 lista_zmiennych Numer zbioru, z którego będą pobierane dane. 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 32 S P
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) Tab(n) wyrazenie pozycja_znaku Służy do wstawiania do wydruku znaków spacji; wartość n oznacza liczbę wstawionych spacji. 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. Dane do zapisu: numeryczne lub łańcuchowe. 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. 33
Instrukcje operacji wejścia/wyjścia c.d. Open test1.txt" For For Output As As #1 #1 Print #1, #1, "To "To tylko test" Print #1, #1, Wydruk pustej linii do do zbioru. Print #1, #1, "Zone 1"; 1"; Tab Tab ; "Zone 2" 2" Dwie strefy druku. Print #1, #1, "Hello" ; " " ; "World" Spacja. Print #1, #1, Spc(5) ; "5 "5 przednich spacji " Pięć spacji. Print #1, #1, Tab(10) ; "Hello" Druk w kolumnie nr nr 10. 10. Dim Dim MyBool, MyDate, MyNull, MyError MyBool = False : MyDate = #7/20/1969# MyNull = Null : MyError = CVErr(32767) Print #1, #1, MyBool ; " jest wartością typu Boolean" Print #1, #1, MyDate ; " jest datą" Print #1, #1, MyNull ; " posiada wartość null" Print #1, #1, MyError ; " określa numer błędu" Close #1 P #1 34 S
Instrukcje operacji wejścia/wyjścia c.d. Write #numer_pliku, [lista_wyjscia] Zapisuje dane do pliku sekwencyjnego. numer_pliku lista_wyjscia Element obowiązkowy. Dowolny poprawny numer pliku. 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. Print #1, Spc(5) ; "5 znaków spacji " Print #1, Tab(10) ; "Cześć" 'Drukuj słowo w 10 kolumnie. Close #1 'Zamknij plik. P 35 S
Instrukcje operacji wejścia/wyjścia c.d. Put [#]numer_pliku, [numer_rekordu], nazwa_zmiennej numer_pliku numer_rekordu nazwa_zmiennej Przepisuje dane ze zmiennej do pliku dyskowego. Element obowiązkowy. Dowolny poprawny numer pliku. Element nieobowiązkowy. Wartość typu Variant. Jest to numer rekordu (Random) lub numer bajtu (Binary). 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 P Close #1 36 S
Instrukcje operacji wejścia/wyjścia c.d. Get [#]numer_pliku, [numer_rekordu], nazwa_zmiennej numer_pliku numer_rekordu nazwa_zmiennej Wczytuje do zmiennej dane z otwartego pliku dyskowego Element obowiązkowy. Dowolny poprawny numer pliku. Element nieobowiązkowy. Wartość typu Variant. Numer rekordu (Random) lub numer bajtu (Binary). 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 37 S P
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 P 38 S
Polecenia operacji na plikach i katalogach Polecenie ChDir ChDrive Dir FileCopy FileDateTime FileLen GetAttr Kill MkDir Name RmDir SetAttr Opis działania Zmienia bieżący katalog Zmienia bieżący napęd Zwraca nazwę pliku lub katalog pasujący do określonego wzorca lub atrybutu pliku Kopiuje plik Zwraca datę i godzinę ostatniej modyfikacji pliku Zwraca rozmiar pliku w bajtach Zwraca wartość reprezentującą atrybut pliku Usuwa plik Tworzy nowy katalog Zmienia nazwę pliku lub katalogu Usuwa pusty katalog Zmienia atrybut pliku 39
Funkcje sprawdzające - przykłady Zwrócenie przez funkcję Dir pustego ciągu znaków oznacza, że nie można znaleźć poszukiwanego pliku. 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). Function PathExists(nazwa) As Boolean PathExists = (GetAttr(nazwa) and vbdirectory) _ = vbdirectory End Function 40
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 41
Instrukcja dla skróconego wywołania (With) Składnia: With obiekt.podprogram.wlasciwosc [instrukcje] End End With 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 42
Wykorzystanie obiektu FileSearch Właściwość lub metoda FileName FoundFile LookIn SearchSubFolder Execute NewSearch Opis działania Nazwa pliku do wyszukania (możliwe do stosowania znaki wzorców) Zwraca obiekt zawierający nazwy znalezionych plików Katalog do wyszukiwania True, jeśli mają być przeszukiwane podkatalogi Wykonuje operację wyszukiwania 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 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 44
Rodzaj błędu Składniowy Wykonania Logiczny Obsługa błędów w VBA Opis 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. 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. 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 45
Obsługa błędów w VBA c.d. Przykład wygenerowanego błędu podczas działania procedury: Public Sub Sub Blad1() Dim Dim a, a, b, b, c a = InputBox("Podaj wartość a: a: ") ") b = InputBox("Podaj wartość b: b: ") ") c = a / b: b: MsgBox "Wynik obliczeń: " & c End End Sub Sub Numer wygenerowanego błędu P 46
Obsługa błędów w VBA c.d. Zastosowanie instrukcji On On Error w zabezpieczeniu przed błędami: Public Sub Sub Blad2() Dim Dim a, a, b, b, c W chwili błędu, wyjście z On On Error GoTo Blad podprogramu. a = InputBox("Podaj wartość a: a: ") ") b = InputBox("Podaj wartość b: b: ") ") c = a / b: b: MsgBox "Wynik obliczeń: " & c Exit Sub Sub Blad: MsgBox "Uwaga! Dzielenie przez zero!" End End Sub Sub Zabezpieczenie przed wszystkimi błędami. Komunikat w ogólności może być nieprawidłowy. P 47