Algorytmika i Programowanie VBA 1
Transkrypt
Algorytmika i Programowanie VBA 1
Algorytmika i Programowanie VBA 1 - podstawy Tomasz Sokół ZZI, IL, PW Czas START • uruchamianie środowiska VBA w Excelu • Alt-F11 lub Narzędzia / Makra / Edytor Visual Basic • konfiguracja środowiska VBA • przy pierwszym uruchomieniu należy wymusić jawne deklaracje zmiennych • menu Tools / Options... • Option Explicit • wstawianie modułów • menu Insert / Module • kody swoich programów piszemy tylko w modułach !!! 1 Program • program to ciąg instrukcji podany w odpowiedniej kolejności (algorytm), instrukcje mogą być grupowane w jednym lub kilku podprogramach • instrukcje dzielimy na: • instrukcje wykonywalne • deklaracje / definicje • oprócz instrukcji program może też zawierać komentarze i specjalne dyrektywy kompilatora • w VBA komentarz zaczyna się znakiem apostrofu ' i wszystkie znaki po nim do końca danej linii są ignorowane przez kompilator (służą tylko programiście) Program w VBA • w VBA programem może być dowolna bezparametrowa procedura Sub Nazwa() 'kod programu End Sub • uruchamianie programu może odbywać się: • z poziomu Excela (Alt-F8) • lub z poziomu edytora VBA (F5) • uwaga: w VBA można też uruchamiać programy w trybie debugowania (krokowo), posługując się klawiszem F8 2 Deklaracje zmiennych • Dim Nazwa_Zmiennej As Typ • Dim i As – to słowa kluczowe deklaracji • deklaracje mogą być w dowolnym miejscu programu, ale przed użyciem zmiennej !!! • deklaracje można grupować w jednej linii, ale typ każdej zmiennej należy w VBA definiować niezależnie !!! • Dim x1, x2, x3 As Double (tu x1 i x2 przyjmą domyślny typ Variant) • Dim x1 as Double, x2 as Double, ... (tak jest OK) • Typ określa rodzaj możliwych do przechowywania danych • liczbowe, logiczne, łańcuchy znakowe, itp • Nazwa_Zmiennej to unikalny identyfikator określany przez programistę Nazwy zmiennych • Nazwa zmiennej to unikalny identyfikator • nie może kolidować z innymi nazwami używanymi w programie (a ściślej w zakresie widzialności) • zmienne, procedury, funkcje, obiekty, • predefiniowane typy danych (Double, Integer, ...) • słowa kluczowe (zarezerwowane identyfikatory składniowe języka), m.in. Sub, Dim, End, If, Then, Else, ... • składa się z ciągu liter, cyfr i znaku podkreślenia _, a pierwszy znak musi być literą, • nie może zawierać znaków specjalnych, interpunkcyjnych, spacji, itp., nie powinno się też używać znaków narodowych (ąćęłńóśżź) • w VBA duże i małe litery nie są rozróżniane • MojaZmienna == MOJAzmienna == mojaZMIENNA == ... 3 Podstawowe typy danych Boolean logiczny True, False Byte mała liczba całkowita 0..255 Integer liczba całkowita 16-bit -32768..32767 Long liczba całkowita 32-bit -231..231-1 Single liczba rzeczywista ok. 7 cyfr znacz. Double liczba rzeczywista 15 cyfr znaczących String łańcuchy znakowe "napis" Variant uniwersalny Wyrażenia i operatory • Formalnie wyrażenie to: • • • • Zmienna, Stała lub Funkcja() Oper1 Wyrażenie (operator jednoargumentowy) Wyr_A Oper2 Wyr_B (operator dwuargumentowy) (Wyrażenie) – grupowanie wyrażeń w nawiasach () • Wyrażenia/operatory dzielimy na: • • • • arytmetyczne – działania na liczbach +-*/ ... konkatenacji – łączenie (sklejanie) łańcuchów znakowych porównania – sprawdzanie: mniejsze, równe, … logiczne – zdania logiczne: negacja, alternatywa, ... • Istotną rolę odgrywają priorytet operatorów i automatyczne konwersje typów danych 4 Operatory arytmetyczne • Wg priorytetu • • • • • • ^ – */ \ Mod +– potęgowanie negacja (jednoargumentowy) mnożenie i dzielenie dzielenie całkowitoliczbowe reszta z dzielenia (całkowitego) dodawanie i odejmowanie • Przykłady: • a + b * c ^ d == a + (b * (c ^ d)) • uwaga: • 1 / a*b == (1/a) * b == b / a (gdyż * ma taki sam priorytet jak /) • w wątpliwych sytuacjach używaj nawiasów • 1 / (a*b) lub 1 / a / b Pozostałe operatory (również wg priorytetu – cd.) • & konkatenacja: • "abc" & "xyz" = "abcxyz" • operatory porównania: • operatory logiczne: • • • • =, <>, <, >, <=, >= Not negacja (jednoargumentowy) And koniunkcja Or alternatywa Xor, Eqv, Imp • Uwagi: • domyślną kolejność operacji możemy zmienić stosując nawiasy () • należy unikać budowania zbyt złożonych wyrażeń, czytelniejsze i efektywniejsze może być składanie podwyrażeń w kolejnych instrukcjach przypisania !!! 5 Funkcje matematyczne • standardowy zestaw funkcji wbudowanych w VBA jest bardzo skromny !!! wykaz dostępnych funkcji można znaleźć w helpie lub poprzez kwalifikator Math (obiekt), np. Math.Sin(x) • można go poszerzyć pisząc własne funkcje, np. Log2(x) = Ln(x) / Ln(2) • lepiej jednak skorzystać z funkcji wbudowanych w Excela, za pośrednictwem obiektu WorksheetFunction, np. • WorksheetFunction.Asinh(x) – Area Sinus Hiperboliczny • WorksheetFunction.Pi() – liczba π • WorksheetFunction.Log(x,2) – logarytm o podstawie 2 Instrukcje - podział • instrukcja przypisania: Zmienna = Wyrażenie • instrukcje sterujące • warunkowe (If..Then..Else..) • pętli (For..Next, Do...Loop) • skoku (GoTo, Exit For/Do/Sub/...) • instrukcja wywołania procedury • [Call] Nazwa_Proc Par1, Par2, ... • uwaga: w VBA parametry procedury podajemy bez nawiasów, natomiast przy wywoływaniu funkcji parametry podajemy w nawiasach, np. Sin(x), ale MsgBox "Komunikat" 6 Instrukcja If...Then...Else • If...Then...Else to podstawowa instrukcja sterująca, umożliwia rozwidlanie algorytmu w zależności od spełnienia (bądź nie) badanego warunku logicznego • składnia If ma dwie postaci: • jednowierszową • blokową • w danym If'ie wykonywana jest tylko jedna gałąź instrukcji • gdy kolejne warunki logiczne się zawierają sprawdzany jest tylko pierwszy !!! If "jednowierszowy" If WarLog Then Instrukcja1 [Else Instrukcja2] • Instrukcja1 jest wykonywana gdy spełniony jest warunek logiczny WarLog, w przeciwnym wypadku wykonywana jest Instrukcja2 (jeśli ją podano) • tą postać If'a należy stosować tylko w wyjątkowych przypadkach (jedna instrukcja) i z dużą rozwagą • pomimo, że VBA dopuszcza grupowanie instrukcji w jednym wierszu (poprzez operator dwukropka :) to należy tego bezwzględnie unikać, np. If x > 0 Then a = 1 : b = 2 Else a = 2 : b = 1 formalnie poprawnie, ale lepszy jest tu If blokowy 7 If blokowy If WarLog Then ciąg instrukcji 1 [ElseIf WarLog2 Then ciąg instrukcji 2] ... [Else ciąg instrukcji "else"] End If • blok główny (wymagany) • blok opcjonalny ElseIf może ich być więcej niż 1 • opcjonalny blok Else wykonywany tylko wtedy gdy żaden z podanych wyżej warunków nie był spełniony – obejmuje wszystkie "pozostałe przypadki" 8