Visual Basic for Application (VBA) http://dzono4.w.interia.pl Książka Visual Basic dla aplikacji w Office XP PL, autorzy: Edward C. Willett i Steve Cummings, Wyd. Helion http://www.mielk.pl/pl/kursy/kursy.php
Typy zmiennych Różne dane różnie zapisywane w pamięci. Rodzaj danej = typ danej. Typ określa: zakres wartości, np. zmienna typu Integer od -32,768 do 32,767, zmienna typu Boolean tylko wartości True lub False wielkośd pamięci zajmowanej przez zmienną, np. zmienna typu Integer 2 bajty, a zmienna typu Single 4 bajty
Typy zmiennych cd. strukturę zajętego przez zmienną obszaru pamięci, np. gdy zmienna typu Byte ma wartośd 137 1 0 0 0 1 0 0 1 a gdy zmienna A jest typu tablicowego Dim A (10) As Byte A 1 A 2 A 3 A 4 A 5 A 6 A 7 A 8 A 9 A 10 gdzie każde A i na 8 bitach zbiór możliwych operacji
Typy zmiennych cd. Przykład: Zmienna, przechowywana w pamięci jako sekwencja bitów 0 1 0 0 1 1 1 1, reprezentuje: - literę O (kod ASCII 79), gdy zmienna została zadeklarowana jako zmienna znakowa (String) - liczbę 79, gdy zmienna została zadeklarowana jako zmienna liczbowa (np. Integer lub Byte). Czyli: typ danej = sposób interpretacji przez program
Przykład 1: program pyta o imię i nazwisko i wita Sub Powitanie() Imie = InputBox("Jak masz na imię?") 'f-cja Wejścia InputBox pozwala wczytywad dane w oknie dialogowym i zwraca domyślnie wartośd typu string nazwisko = InputBox("Jakie jest Twoje nazwisko?") MsgBox "Cześd, " & Imie & " " & nazwisko & "!!!" 'fcja Wyjścia MsgBox służy do wyprowadzenia komunikatów o wynikach End Sub
Przykład 2: program dodaje dwie liczby Sub Dodawanie() 'Dim c As Integer 'Dim a As Integer 'Dim b As Integer a = InputBox("Podaj liczbę całkowitą:") / 7 b = InputBox("Podaj liczbę całkowitą:") / 13 c = a + b MsgBox "Suma " & a & +" & b & "=" & c / 20? End Sub
Typ Danych Zawartość Wielkość pamięci Zakres Byte całkowita 1 bajt 0 do 255 Boolean całkowita 2 bajty True lub False Integer całkowita 2 bajty Long całkowita 4 bajty -32 768 do 32 767 2 147 483 648 do 2 147 483 647
Typ Danych Single Double Zawartość liczba zmiennopozycyjna liczba zmiennopozycyjna Wielkość pamięci 4 bajty 8 bajtów Zakres Ujemne: 3.402823E38 do -1.401298E-45 Dodatnie: 1.401298E-45 do 3.402823E38 Ujemne: 0.79769313486 232E308 do - 4.94065645841 247E-324 Dodatnie: 4.94065645841 247E-324 do 1.79769313486
Operatory Visual Basic Operatory arytmetyczne ^ Operator potęgowania 1 - Operator negacji 2 * Operator mnożenia 3 / Operator dzielenia 3 Operator dzielenia \ całkowitego 4 Mod Operator modulo 5 + Operator dodawania 6 - Operator odejmowania 6
Operatory porównania < Operator mniejszości <= Operator mniejszości lub równości > Operator większości >= Operator większości lub równości = Operator równości <> Operator różności
Operatory łaocuchowe + Operator dodawania & Operator konkatenacji Operatory logiczne Not And Or Operator negacji Operator iloczynu logicznego, koniunkcji Operator sumy logicznej, alternatywy
Instrukcja przypisania. ZMIENNA liczba napis coś innego Przypisywanie wartości zmiennej: L=P (L:=P, LET L=P) Uwaga! Po podstawieniu pod lewą stronę stara wartość zmiennej bezpowrotnie znika!
Przykład 1: Licznik wierszy Sub licznik() program wpisze w kolejne wiersze pierwszej kolumny arkusza kolejne liczby naturalne Cells.Clear instrukcja czyści wszystkie komórki w danym arkuszu Excela i = 1 Cells(1, 1) = "Kolejne wartości i:" instrukcja cells(w,k) oznacza zawartośd komórki w arkuszu Excela, na skrzyżowaniu w-tego wiersza i k-tej kolumny Do Until i = 11 Cells(i + 1, 1) = i i = i + 1 Loop End Sub
Przykład 2: Zamiana zmiennych miejscami x Zwykłe: x=y y=x y Spowoduje inny skutek. Jaki? Dlatego potrzebna jest zmienna pomocnicza, która przez chwilę przechowa wartośd jednej zmiennej
Sub zamieo() Instrukcja przypisania - przykłady x = InputBox("x=") y = InputBox("y=") zp = x x = y y = zp End Sub W tym miejscu zapamiętujemy wejściową wartośd zmiennej x w komórce pomocniczej W tym miejscu odzyskujemy starą wartośd x
Przykład 3: Zmienne boolowskie Sub zm_boolowskie() Dim x As Single Dim y As Single Dim por As Boolean deklarujemy por jako zmienną logiczną x = InputBox("x=") y = InputBox("y=") por = x > y MsgBox "por=" & por tu powinna się wyświetlid wartośd True lub False End Sub
Instrukcje warunkowe If Then - najprostsza instrukcja wyboru Składnia instrukcji If: If Warunek Then Blok instrukcji VB wykonywany gdy warunek jest prawdziwy End If Uproszczona składnia instrukcji If: If Warunek Then Instrukcja1 VB [: Instrukcja2 VB [:... [: InstrukcjaN VB]...]]
Instrukcja warunkowa - If Then TAK Warunek? NIE Instr_1 Instr_2
Instrukcje warunkowe If... Then Else Składnia instrukcji If... Then Else: If Warunek Then Blok instrukcji VB wykonywany gdy warunek jest prawdziwy Else Blok instrukcji VB wykonywany gdy warunek nie jest prawdziwy End If
Instrukcja warunkowa - If Then Else TAK Warunek? NIE Instrukcja_1 Instrukcja_2 Instrukcja_3
Instrukcje warunkowe If... ElseIf zagnieżdżanie warunków Składnia instrukcji If...ElseIf: If Warunek1 Then Blok instrukcji VB wykonywany gdy Warunek1 jest prawdziwy ElseIf Warunek2 Then Blok instrukcji VB wykonywany gdy Warunek1 nie jest prawdziwy a Warunek2 jest prawdziwy [ElseIf Warunek3 Then Blok instrukcji VB wykonywany gdy Warunek1 i Warunek2 nie są prawdziwe a Warunek3 jest prawdziwy... [ElseIf WarunekN Then Blok instrukcji VB wykonywany gdy Warunki od 1 do (N-1) nie są prawdziwe a WarunekN jest prawdziwy ]...] [Else Blok instrukcji VB wykonywany gdy żaden z Warunków od 1 do N nie jest prawdziwy ] End If
Przykład użycia instrukcji If...ElseIf: If (intzysk>3200) Then intpodatek=20 intwiadomosc=msgbox("musisz zapłacid olbrzymi podatek") ElseIf (intzysk>2700) Then intpodatek=16 intwiadomosc=msgbox("musisz zapłacid 16% podatku") ElseIf (intzysk>1400) Then intpodatek=7 intwiadomosc=msgbox("musisz zapłacid 7% podatku") ElseIf (intzysk>600) Then intpodatek=4 intwiadomosc=msgbox("masz mało ale i tak pład!") ElseIf (blnpracuje=false) Then intwiadomosc=msgbox("chyba jesteś na czyimś utrzymaniu...") Else intpodatek=0 intwiadomosc=msgbox("z czego Ty żyjesz?") End If
Przykład 1: Program wczytuje dowolną liczbę rzeczywistą i podaje jej odwrotnośd lub podaje komunikat, że się nie da. Sub dziel() Dim x As Single Dim y As Single Dim war As Boolean zmienna war jest zmienną logiczną i może przyjmowad tylko wartośd True lub False x = InputBox("Podaj dowolną liczbę:") war = x <> 0 If war Then MsgBox "Odwrotnośd liczby " & x & " wynosi " & 1 / x Else MsgBox "Dielenie przez 0 niewykonalne" End If End Sub
Przykład 2: Proste funkcje opis funkcji Function mabs(x) As Single nagłówek fcji z jej nazwą i parametrem formalnym x If x >= 0 Then mabs = x podstawienie wartości pod nazwę fcji Else mabs = -x End If End Function Function msign(x) As Integer nagłówek fcji Dim y As Single If x >= 0 Then y = 1 Else y = -1 End If msign = y podstawienie wartości pod nazwę fcji End Function
Przykład 2: Proste funkcje wywołanie funkcji Sub Mabs_Msign() x = InputBox("x=") program wywołujący działanie funkcji MsgBox "Wartośd bezwzględna z " & x & "=" & mabs(x) tu skok do opisu fcji MsgBox "Znak " & x & "=" & msign(x) End Sub
Przykład 3: Program znajduje minimum z 3 liczb. W tym celu powstały dwie procedury z parametrami. Zostaną one wywołane w punkcie c). a) Bez użycia zmiennych logicznych typu Boolean Sub Min_Trzy_1(a, b, c, min) nagłówek procedury z parametrami formalnymi If a < b Then If a < c Then min = a Else min = c End If Else If b < c Then min = b Else min = c End If End If End Sub
b) z użyciem zmiennych logicznych typu Boolean Sub Min_Trzy_2(a, b, c, min) Dim w1 As Boolean Dim w2 As Boolean Dim w3 As Boolean deklarujemy 3 zmienne logiczne w1 = (a < b) And (a < c) w2 = (b < a) And (b < c) w3 = (c < a) And (c < b) If w1 Then min = a If w2 Then min = b If w3 Then min = c End Sub
c) Wywołanie procedur z parametrami przy użyciu instrukcji call Sub Min_Trzy_1_2() Dim a As Integer Dim b As Integer Dim c As Integer a = InputBox("a=") b = InputBox("b=") c = InputBox("c=") Call Min_Trzy_1(a, b, c, min) wywołanie procedury z parametrami aktualnymi MsgBox "Min wg Min_Trzy_1=" & min Call Min_Trzy_2(a, b, c, min) MsgBox "Min wg Min_Trzy_2=" & min End Sub
Przykład 4: Program nalicza podatek, w zależności od dochodów, używając rozbudowanej postaci instrukcji warunkowej If...Then ElseIf. End Sub Zyski() intzysk = InputBox("Ile zarabiasz?") If (intzysk > 1200) Then intpodatek = 20 intwiadomosc = MsgBox("Musisz zapłacid olbrzymi podatek") ElseIf (intzysk > 700) Then intpodatek = 16 intwiadomosc = MsgBox("Musisz zapłacid 16% podatku") ElseIf (intzysk > 400) Then intpodatek = 7 intwiadomosc = MsgBox("Musisz zapłacid 7% podatku") ElseIf (intzysk > 200) Then intpodatek = 4 intwiadomosc = MsgBox("Masz mało ale i tak pład!") 'ElseIf (blnpracuje = False) Then 'intwiadomosc = MsgBox("Chyba jesteś na czyimś utrzymaniu...") Else intpodatek = 0 intwiadomosc = MsgBox("Z czego Ty żyjesz?") End If End Sub
Przykład 5: Obliczenia wartości funkcji rzeczywistych (w postaci klamrowej) Opis funkcji: Function f(x) As Single If x < -1 Then f = x ^ 4 + 1 ElseIf x = -1 Then f = Sin(x ^ 3 + 2) Else f = x ^ 7 - x ^ 4 End If End Function
Wywołanie funkcji dla jednego argumentu Sub WYW_FUn() x = InputBox("x=") MsgBox "Wartośd f-kcji f dla x=" & x & " wynosi " & f(x) tu następuje wywołanie funkcji przez podanie nazwy funkcji i parametru aktualnego oraz skoku do opisu fcji End Sub
Tablica wartości funkcji dla wielu argumentów: Sub tablica_fun1() Cells.Clear i = 1 Cells(1, 1) = "x" Cells(1, 3) = "f(x)" For x = -2 To 2 Step 0.1 argument fcji zmienia się od -2 do 2, z krokiem 0,1 i = i + 1 zmienna i zawiera numer kolejnego wiersza w arkuszu Excela Cells(i, 1) = x Cells(i, 3) = f(x) Next x End Sub
Sied działao START Utwórz wzór hasła Ustal adres Wprowadź hasło TAK Wyprowadź adres Czy hasło OK? NIE Wyprowadź komunikat Złe hasło! STOP
Przykład 6: Program podaje adres po wprowadzeniu prawidłowego hasła Sub Hasla1() Dim wzor_hasla As String Dim haslo As String Dim adres As String deklarujemy wszystkie zmienne jako typu String wzor_hasla = XYXY tworzenie wzoru hasła adres = Wydz. M-E, Wyb. Wyspiaoskiego 27 ustalanie adresu haslo = InputBox("Podaj haslo:") If haslo = wzor_hasla Then MsgBox "Adres:" & adres Else MsgBox "Złe hasło!" End If End Sub
Przykład 7: Program rozwiązuje równanie liniowe dla dowolnych współczynników a, b. Sub RL() Dim a As Single Dim b As Single Dim x As Single zmienne na współczynniki i rozwiązanie deklarujemy jako liczby rzeczywiste a = InputBox("a=") b = InputBox("b=") If a = 0 Then If b = 0 Then MsgBox "Nieskooczenie Wiele Rozwiązao" Else MsgBox "Równanie Sprzeczne" End If Else x = -b / a MsgBox "x=" & x End If End Sub
Przykład 8: program rozwiązuje równanie kwadratowe ax 2 +bx+c=0, dla dowolnych współczynników a, b, c oraz podaje odpowiedni komunikat, gdy równanie nie ma rozwiązania w zbiorze liczb rzeczywistych. Sub RK() Dim a As Single Dim b As Single Dim c As Single Dim x1 As Single Dim x2 As Single a = InputBox("a=") b = InputBox("b=") c = InputBox("c=") delta = b ^ 2-4 * a * c
Ciąg dalszy programu - algorytm rozwiązania If delta < 0 Then MsgBox "Brak Rozw. w R" ElseIf delta = 0 Then x1 = -b / 2 / a x2 = x1 MsgBox "Podwójny pierwiastek x1=x2=" & x1 Else x1 = (-b - Sqr(delta)) / 2 / a Sqr() funkcja zwracająca x2 = (-b + Sqr(delta)) / 2 / a wartośd pierwiastka kwadratowego MsgBox "x1=" & x1 & " x2=" & x2 End If End Sub