Algorytmika i Programowanie VBA 1 - podstawy

Algorytmika i Programowanie VBA 1 - podstawy Tomasz Sokół ZZI, IL, PW Czas START • uruchamianie środowiska VBA w Excelu • Alt-F11 lub Narzędzia / Mak...
2 downloads 1 Views 155KB Size
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