Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie muszą). Uwaga! Te fragmenty w kodzie używamy bez nawiasów []. W nawiasach {} umieszczam alternatywę przedzielaną znakiem. Np. {0 1} oznacza 0 lub 1. Oczywiście w kodzie jedno lub drugie bez {}. Trzy kropki oznaczają i tak dalej nie występują oczywiście w kodzie! Moduły Kod programu VBA przechowywany jest w modułach (proste programy w pojedynczym module). Rozróżniamy trzy rodzaje modułów: 1. Moduł klasy moduł zawierający definicję klasy, czyli szablonu obiektu; wszystkie procedury w nim zapisane są metodami obiektów tej klasy. 2. Moduł formularza moduł zawierający kod formularza, czyli okna dialogowego; tworzymy go, gdy projektujemy własne formularze. 3. Moduł kodu źródłowego moduł zawierający właściwy kod programu lub inne funkcje i procedury nie będące metodami (możemy np. cały zbiór takich funkcji i procedur zdefiniować w osobnym module niż programowy). Struktura modułu Instrukcje zapisane w module pogrupowane są w procedury i funkcje. Moduł może zawierać również zapisane na początku opcje. Opcje modułu (niektóre) Option Base {0 1} ustala, od jakiej liczby zaczyna się indeksowanie tablicy domyślnie jest to 0 Option Explicit wymusza deklarowanie wszystkich zmiennych Procedury Deklaracja procedury [Public Private Friend] [Static] Sub nazwa_proc [(lista_argumentów)] deklaracje zmiennych lokalnych (jeśli są) [Exit Sub] End Sub W najprostszej postaci: Sub nazwa_proc End Sub Wywołanie procedury nazwa_proc [wart_arg1, wart_arg2, ] lub Call nazwa_proc [(wart_arg1, wart_arg2, )]
Funkcje Deklaracja funkcji [Public Private Friend] [Static] Function nazwa_fun [(lista_argumentów)] As typ deklaracje zmiennych lokalnych (jeśli są) nazwa_fun = wyrażenie [Exit Function] nazwa_fun = wyrażenie End Function W najprostszej postaci: Function nazwa_fun (argument) As typ nazwa_fun = wyrażenie 'niekoniecznie na końcu (może być gdzieś w środku kodu, a nawet kilka razy) End Function Wywołanie funkcji nazwa_zmiennej=nazwa_fun [wart_arg1, wart_arg2, ] Zmienne Deklaracja zmiennych Dim nazwa_zm As typ_zm Zmienna wywołana w tej postaci jest dostępna z poziomu wywołania (wewnątrz procedury, wewnątrz funkcji lub wewnątrz modułu, jeśli zadeklarujemy ją w module). Deklaracja zmiennych tablicowych Dim nazwa_zm(indeks_górny) As typ_zm Tu indeks dolny tablicy wynosi 0 lub 1 (jeśli tak zadeklarowaliśmy w Option Base). Albo: Dim nazwa_zm(indeks_dolny To indeks_górny) As typ_zm Dla tablic wielowymiarowych (można do 60 wymiarów), kolejne indeksowania oddzielamy przecinkami. Deklaracja zmiennych tablicowych dynamicznych Dim nazwa_zm() As typ_zm Rozmiar tak zadeklarowanej tablicy trzeba kiedyś zadeklarować; robi się to tak: ReDim nazwa_zm(indeksy) Uwaga! Polecenie to można wywołać wiele razy (można wiele razy zmieniać rozmiar tablicy), ale niszczy ono za każdym razem zawartość tablicy! Żeby zachować zawartość tablicy, robimy to tak: ReDim Preserve nazwa_zm(indeksy) Uwaga! W ten sposób możemy zmieniać tylko górny indeks ostatniego wymiaru! W przeciwnym wypadku dostaniemy błąd! Przypisanie zmiennej wartości innej zmiennej: nazwa_zm = nazwa_innej_zm funkcji: nazwa_zm = nazwa_fun(argumenty) wyrażenia: nazwa_zm = wyrażenie Zmiennej tablicowej przypisujemy wartości poprzez odwoływanie się do jej elementów poprzez indeksy.
Instrukcje wyboru Instrukcja If If Warunek Then Instrukcja Lub dla kilku krótkich instrukcji: If Warunek Then Instrukcja1:Instrukcja2: Lub w postaci blokowej: If Warunek Then Instrukcja (lub instrukcje) wykonywane są tylko wtedy, gdy warunek jest spełniony. Instrukcja If Else If Warunek Then Instrukcja1 Else Instrukcja2 Można wrzucić kilka krótkich instrukcji, oddzielając je dwukropkami, ale wszystko musi być w jednej linii. Nie będę podawał składni analogiczna jak wyżej. Postać blokowa: If Warunek Then 1 Else 2 Instrukcja (lub instrukcje) po Then wykonywane są, gdy warunek jest spełniony; po Else, gdy warunek nie jest spełniony. Instrukcja If ElseIf Stosujemy ją wtedy, gdy zagnieżdżamy kilka warunków: If Warunek1 Then 1 ElseIf Warunek2 Then 2 [ElseIf Warunek3 Then 3 [ElseIf WarunekN Then N ]] [Else pozostałych ] Uwaga! Warunki sprawdzane są po kolei i wykonywany jest tylko jeden blok instrukcji. Instrukcja Select Case W poniższej składni sprawdzamy, czy Wyrażenie przyjmuje wymienione wartości: Case Wartość1 1 Case Wartość2 2 [Case Wartość3 3 [Case WartośćN N ]] [Case Else dla pozostałych przypadków] Zmiennej tablicowej przypisujemy wartości poprzez odwoływanie się do jej elementów poprzez indeksy.
Instrukcja Select Case Is W przypadku, kiedy nie chodzi nam o równość Wyrażenie = Wartość, ale o inną relację, wtedy używamy konstrukcji: Case Is Relacja1 1 Oczywiście można to mieszać ze zwykłymi Case. Instrukcja Select Case To W przypadku, kiedy nie chodzi nam o równość Wyrażenie = Wartość, ale o zakres pomiędzy dwiema wartościami, wtedy używamy konstrukcji: Case Wart1dolna To Wart1górna 1 Oczywiście można to mieszać ze zwykłymi Case. Pętle Pętla Do Until Do Until (Warunek) Loop jest wykonywany dopóki warunek nie jest spełniony. Pętla Do Loop Until Do Loop Until (Warunek) Różni się od poprzedniej tym, że warunek jest sprawdzany na końcu pętli, a więc blok instrukcji będzie wykonany przynajmniej raz. Pętla Do While Do While (Warunek) Loop jest wykonywany tak długo, jak długo warunek jest spełniony. Pętla Do Loop While Do Loop While (Warunek) Różni się od poprzedniej tym, że warunek jest sprawdzany na końcu pętli, a więc blok instrukcji będzie wykonany przynajmniej raz. Pętla For For Licznik = Wart_Pocz To Wart_Końc [Step Krok] Next [Licznik] Pętla wykonywana określoną liczbę razy dla licznika od wartości początkowej do wartości końcowej. Krok podajemy wtedy, kiedy jest on inny niż 1. Pętla kończy się, kiedy licznik przekroczy wartość końcową.
Obsługa plików Aby na pliku wykonać jakąś operację (odczyt, zapis), należy wykonać następujące czynności: 1. Otworzyć plik z deklaracją w jakim celu. 2. Dokonać na nim operacji odczytu lub zapisu. 3. Zamknąć plik. Podam tu tylko instrukcje potrzebne do odczytu z i zapisu do pliku tekstowego wartości zmiennych. Otwarcie pliku Podaję tu tylko składnię konieczną (bez dodatkowych składników opcjonalnych). Open Ścieżka For Tryb As [#]NrPliku Ścieżka, to oczywiście ścieżka dostępu do pliku w systemie. Podajemy ją w postaci łańcucha znakowego (w cudzysłowach " ") lub w postaci zmiennej łańcuchowej przechowującej wartość tego łańcucha. Tryb, to cel otwarcia pliku: Input do odczytu, Output do zapisu (niszczy zawartość pliku), Append do dopisania na końcu pliku. Te trzy tryby używamy do plików tekstowych, pozostałe to: Binary i Random. NrPliku, to pierwszy dostępny (nie zajęty!) numer w zakresie 1-511. Odczyt z pliku Input [#]NrPliku, ListaZmiennych Kolejne wartości w pliku muszą odpowiadać sekwencyjnie typom zmiennych z podanej listy. LineInput [#]NrPliku, ZmienaŁańcuchowa Do zmiennej zwracana jest wartość całej linii (do znaku powrotu karetki Chr(13) lub sekwencji znaków powrotu karetki i końca linii ichr(13)+chr(10)) w postaci łańcucha znakowego. Zapis do pliku Write [#]NrPliku [, ListaWart] Jeżeli pominiemy listę wartości, to zapisana zostanie pusta linia. Wartości w pliku oddzielane są przecinkami, a łańcuchy znakowe wpisywane w cudzysłowach, ana końcu każdej listy wartości wstawiany jest znak końca linii. Lista wartości może być podana bezpośrednio, albo za pośrednictwem zmiennych. Print [#]NrPliku, [ListaWy] W tym wypadku mamy większe możliwości sterowania sposobem zapisu (wstawianie spacji, tabulatorów, ustawianie miejsca wpisu w linii, itd.). Zamknięcie pliku Close [ListaNrPlików] Pominięcie listy numerów powoduje zamknięcie wszystkich plików.