Poprawne nazewnictwo zmiennych i obiektów: VISUAL BASIC Nazwa powinna rozpoczynać się od litery; wewnątrz nazwy można używać znaku podkreślenia nazwa nie może zawiera znaków interpunkcyjnych:! @ & $ #?, *. { } ( ) [ ] = + -^ % / \~ < > : ; nazwa nie może zawierać spacji; nie wskazane jest stosowanie w nazwach polskich liter; nazwa zmiennej może maksymalnie zawierać255 znaków; nazwa formularza lub formantu może zawierać do 40 znaków; nazwa nie może być taka sama jak nazwa funkcji, instrukcji lub metody wbudowanej; moduł kodu nie może zawierać procedur o tych samych nazwach; nazwy zmiennych mogą się powtarzać, gdy są deklarowane lokalnie w procedurach, a nie w sekcji deklaracji modułu należy zwrócić uwagę, że VBA nie rozróżnia wielkich i małych liter. Typy zmiennych: Opis Deklaracje zmiennych Schemat deklaracja nazwa As typ_zmiennej deklaracja Dim, Private zasięg lokalny - Public zasięg globalny Liczby całkowite: BYTE [0..255] INTEGER [-32768..32767] LONG [-2mld..2mld] Liczby rzeczywiste: Zmienne i typy danych SINGLE DOUBLE Tekst: pojedyncza dokładność podwójna dokładność STRING długość dynamiczna (max ok 2mld znaków) STRING*D stała dł. D = 0..65535 Logiczne: BOOLEAN 2 wartości: True, False 1) Operatory porównawcze: Operatory = równa się/przypisanie wartości zmiennej > większe
>= większe równe < mniejsze <= mniejsze równe <> różne 2) Operatory arytmetyczne: + dodawanie odejmowanie * mnożenie / dzielenie ^ potęgowanie \ dzielenie całkowite MOD reszta z dzielenia całkowitego 3) Operatory łączenia tekstów: + łączy dwa teksty & wymusza łączenie tekstu z innym typem danych ZWF [operator ZWF operator ZWF...] gdzie: Wyrażenie ZWF zmienna lub wartość lub funkcja operator operator inny niż logiczny NOT() zaprzeczenie Operatory logiczne () AND () koniunkcja () OR () alternatywa 1) pojedynczy: wyrażenie operatorp wyrażenie gdzie: Wyrażenie logiczne (Warunek) wyrażenie opisano wcześniej operatorp operator porównawczy 2) złożony: (warunek1) operatorl (warunek2) gdzie: warunek1, warunek2 warunki pojedyncze operatorl operator logiczny
IF warunek1 THEN ciąg instrukcji Instrukcja warunkowa [ELSEIF warunek2 THEN ciąg instrukcji] [ELSE ciąg instrukcji] END IF SELECT CASE parametr CASE wartość1 ciąg instrukcji [CASE wartość2 Instrukcja wyboru ciąg instrukcji] [.] [CASE ELSE ciąg instrukcji] END SELECT FOR licznik = wp TO wk [STEP wartość] ciąg instrukcji Pętla FOR NEXT licznik wp-wartość początkowa wk-wartość końcowa wartość liczba całkowita dodatnia DO [WHILE/UNTIL warunek] Pętla DO/LOOP Wbudowane funkcje liczbowe ciąg instrukcji LOOP [WHILE/UNTIL warunek] S As STRING X As DOUBLE
STR(X) -zamienia liczbę na tekst SIN(X), COS(X), TAN(X) f-cje trygonom. (X kąt w radianach) ATN(X) -arcus tangens wynik w rad. SQR(X) -pierwiastek kwadratowy (X>=0) ABS(X) -wartość bezwzględna SGN(X) (-1 dla X<0, 0 dla X=0, 1 dla X>0) FIX(X) -zwraca część całkowitą z X INT(X) -jw ale ujemne zaokrągla w dół RND -losuje liczbę rzeczywistą <0, 1> LOG(X) -logarytm naturalny z X EXP(X) -odwrotność LOG(X) S, S1 As STRING K, L As INTEGER VAL(S) LEN(S) -zamienia tekst na liczbę -długość tekstu/liczba znaków LEFT(S, L) -wycina L pierwszych znaków Wbudowane funkcje tekstowe RIGHT(S, L) -wycina L ostatnich znaków MID(S, K, L) -wycina L znaków z poz. K INSTR(S, S1) -szuka pozycji S1 w S INSTR(K, S, S1) -jw ale zaczyna od poz K TRIM(S) -obcina spacje na pocz. i końcu LCASE(S) -zamienia na małe litery UCASE(S) -zamienia na wielkie litery
1) Jako procedura: MsgBox tekst1, ikona+przyciski, tekst2 2) Jako funkcja: =MsgBox(tekst1, ikona+przyciski, tekst2) tekst1 komunikat pojawiający się w oknie tekst2 tytuł okienka ikona: vbinformation ikonka informacyjna MsgBox vbquestion znak zapytania vbexclamation wykrzyknik vbcritical znak krytycznego błędu przyciski: vbokonly tylko OK (można pominąć vbokcancel OK/Anuluj vbyesno Tak/Nie vbyesnocancel Tak/Nie/Anuluj InputBox vbabortretryignore Przerwij/Ponów/Zignoruj = InputBox(komunikat) deklaracja SUB nazwa(parametry) ciąg instrukcji END SUB Procedura deklaracja rodzaj deklaracji procedury (zasięg działania): Private widoczna tylko w części kodu, w której jest deklarowana; Public widoczna w całym programie; nazwa procedurę wywołuje się za pomocą zadeklarowanej nazwy; parametry zmienne podawane przy wywołaniu procedury. dekl. FUNCTION nazwa(parametry) As typ Funkcja ciąg instrukcji nazwa = wynik
END FUNCTION dekl. rodzaj deklaracji (patrz wyżej) nazwa, parametry patrz wyżej wynik nazwie funkcji musi być przypisane jakieś wyrażenie obliczające wynik działania funkcji związany z jej typem. Okno Edytora Środowisko edytora składa się z następujących elementów: pasek poleceń i menu z opcjami file, edit, view itd., przybornik - daje dostęp do formantów systemu Visual Basic, okno właściwości - umożliwia zmianę właściwości obiektów, okno eksploratora projektu - umożliwia przełączanie się między składnikami projektu, okno projektu - w nim znajduje się obiekt z rozmieszczonymi formantami, okno kodu - w nim wpisujemy kod programu. Początek Moduły-nowy- Nadawanie nazwy: zaznaczyć nazwę _w oknie Properties tak, jak to widać na rysunku, i wpisać inną nazwę. Na pasku narzędziowym klik na przycisk Save. Nazwę modułu można również zmienić klikając ją prawym przyciskiem myszy w oknie dialogowym Baza danych i wybierając z menu podręcznego polecenie Zmień nazwę.
Zapis kodu Kod VBA jest zapisywana w blokach zwanych procedurami. Dzielimy je na dwa rodzaje: procedury typu Sub (podprogramy) i procedury typu Function. Podprogramy wykonują zadania, ale nie zwracają wartości, funkcje zwracają wartość. Na górze modułu widać: Option Compare Database. Są to deklaracje ogólne modułu. Zapis ten umożliwia wybranie jednego z trzech sposobów sortowania łańcuchów znakowych wewnątrz kodu: Option Compare Database powoduje sortowanie w takim samym porządku jak sortowanie rekordów bazy danych i jest to opcja najczęściej stosowana. Zadanie Ustaw ToolsOptions-require variables aby wymusić deklarowanie zmiennych przed ich użyciem. Napisz Sub addnumbers() i naciśnij Enter zostanie dodana zdania zamykające End Sub rozpoczynanie nazwy od małej litery wcinania kod procedur staranne komentowanie, komentarza rozpoczynamy od apostrofu, zostaje on wyróżniony na zielono Co oznaczają poszczególne kolory, można zobaczyć, w Tools/Options. Po otwarciu okna dialogowego Options karta Editor Format pokaże znaczenie poszczególnych kolorów i pozwoli na dokonanie zmian schematu Deklarowanie zmiennych Deklarując zmienną określa się typ danych jaki może przyjmować ta zmienna. Aby to zrobić, należy użyć instrukcji Dim. Słowo Private określa deklarowanie zmiennej prywatnej a Public zmiennej publicznej. Nadawanie wartości zmiennym NazwaZmiennej = Wyrażenie Przykład użycia operatora podstawienia: intliczba = 1 intkomunikat = MsgBox ("To jest komunikat") Zmiennej intliczba przypisywana jest wartość 1. Zmiennej intkomunikat przypisywany jest wynik działania funkcji MsgBox() (najpierw wykonywana jest funkcja, a po jej zakończeniu otrzymany z funkcji wynik jest przypisywany zmiennej). Typ danych zapisywanego wyrażenia musi być zgodny z typem danych zmiennej NazwaZmiennej = NazwaZmiennej operator Wyrażenie Operator jest operatorem matematycznym, logicznym lub łańcuchowym (w zależności od typu zmiennej). Ponieważ najpierw jest wykonywane działanie po prawej stronie, więc najpierw zostanie
obliczona wartość tam występująca a dopiero potem nowa wartość zostanie podstawiona pod zmienną NazwaZmiennej. Przykład: intliczba = 10 ntliczba = intliczba + 5 Zmiennej intliczba przypisywana jest wartość 10. Wartość zmiennej intliczba zostanie zwiększona później o 5 (10+5) i przypisana zmiennej intliczba. Po wykonaniu podstawienia zmienna intliczba będzie miała wartość 15. Zmienne prywatnego poziomu modułu Zmienne z zasięgiem prywatnego poziomu modułu są widzialne dla wszystkich procedur w ich macierzystym formularzu lub module, ale nie dla innych formularzy lub modułów. Przykład zadeklarować sngliczba jako zmiennej Single prywatnego poziomu modułu: Private sngliczba As Single Zmienne poziomu modułu są przydatne do obliczeń, których wyniki mają być wspólne dla różnych procedur w jednym formularzu lub module. Zmienne publicznego poziomu modułu Zmienne z zasięgiem publicznego poziomu modułu są widzialne dla każdej procedury w każdym formularzu w całym projekcie Public strkomunikat As String Zmienne publicznego poziomu modułu są przydatne do obliczeń, których wyniki powinny być wspólne dla całości projektu ze wszystkimi formularzami i/lub modułami. Przesłanianie Visual Basic umożliwia deklarowanie tej samej nazwy dla zmiennych lub stałych symbolicznych różnych zasięgów. Na przykład, można zadeklarować dwie zmienne intnumber w ogólnym module: jedną zmienną publiczną, a drugą zmienną prywatną. Która z tych dwóch zmiennych będzie używana w Visual Basic zależy od tego, która część kodu została uruchomiona, kiedy została zastosowana zmienna. Jeżeli procedura, w której zadeklarowaliśmy prywatną zmienną intnumber, została uruchomiona, Visual Basic będzie używał zmiennej prywatnej intnumber. Jeżeli ta procedura nie została uruchomiona, Visual Basic zastosuje zmienną publiczną intnumber. Zmienne publiczne zostają przesłonięte przez zmienne prywatne o tej samej nazwie. Wartość zmiennej publicznej nie ulegnie zmianie a każde odwołanie do zmiennej będzie się odnosiło do zmiennej prywatnej. Visual Basic zawsze używa zmiennej, która jest bliższa uruchomionemu kodowi.
Stałe Jeżeli w programie używać będziemy zmiennej posiadającej jedną-niezmienną wartość wówczas zadeklarujemy ją jako stałą. Const nazwa_stalej = wartosc Możemy zadeklarować stale publiczne lub prywatne wraz z wskazaniem typu. [Public Private] Const nazwa_stalej [As type] = wartosc Zadanie Wpisz: Sub addnumbers() 'deklaracja zmiennych Dim intnumber1 As Integer Dim intnumber2 As Integer Dim intsun As Integer End Sub Zostaną zapamiętane dwie liczby. Po dodaniu ich suma zostanie zapamiętana w zmiennej intsun Variant Variant pozwala VBA na samodzielne określanie, jaki typ danych jest zapamiętywany. Jest to domyślny typ zmiennych, jeżeli w deklaracji zmiennej pominiemy klauzule As Integer. Wielu programistów uważa, że użycie zbyt wielu zmiennych typu varianyt powoduje zbędne zajmowanie pamięci i spowalnia działanie kodu Użycie funkcji InputBox Wpisz Sub addnumbers() 'deklaracja zmiennych Dim intnumber1 As Integer Dim intnumber2 As Integer Dim intsun As Integer 'uzycie InputBox do wprowadzenia liczb intnumber1 = InputBox("Wpisz pierwszą liczbę") intnumber2 = InputBox("Wpisz drugą liczbę") End Sub
Uruchom kod, klikając przycisk Run: Spowoduje to wyświetlenie pokazanego tu okna dialogowego do wprowadzenia pierwszej liczby (do wprowadzenia drugiej liczby zostanie wyświetlone oddzielne okno). Jeżeli dodamy zapis: 'Wyjście informacji Debug.Print "Podane liczby to " & intnumber1 & " i " & intnumber2 To podane liczby pokażą się na dole w oknie Immediat. Jeśli go nie ma, to View-Immediate. Innym sposobem formatowania wyjścia jest użycie okna komunikatów
Struktura decyzyjna Wpisz Sub iftekst() Dim intnum As Integer Dim strmessage As String intnum = 12 If intnum > 10 Then strmessage = "Liczba jest równa " & intnum End If Debug.Print strmessage End Sub Wynik działania: Liczba jest równa 12 Poprawiamy kod
Zadanie Użyj funkcji wbudowanych do wprowadzania liczby i wyświetlania wyjściowego komunikatu Sub iftekst() Dim intnum As Integer Dim strmessage As String 'uzycie InputBox do wprowadzenia liczby intnum = InputBox("Wpisz liczbę") If intnum > 10 Then strmessage = "liczba jest większa od 10" Else strmessage = "liczba jest mniejsza lub równa 10" End If Debug.Print strmessage 'Komunikator MsgBox "Podana " & strmessage & " End Sub Warunki złożone Zmodyfikuj kod, opisz działanie programu Option Compare Database Option Explicit Private intnum As Integer Sub iftekst() Dim strmessage As String 'uzycie InputBox do wprowadzenia liczby
intnum = InputBox("Wpisz liczbę od 1 do 15") If intnum >= 1 And intnum <= 15 Then iftest2 Else MsgBox "Liczba musi byc z przedziału od 1 do 15" End If End Sub Sub iftest2() If intnum > 10 Then MsgBox intnum & " jest większa od 10" Else MsgBox intnum & " jest mniejsza lub równa 10" End If End Sub Zadeklarowano zmienną intnum jako globalną Instrukcja ElseIf Option Compare Database Option Explicit Sub iftekst() Dim intnum As Integer intnum = 12 If intnum = 1 Then Debug.Print "To jest najmniejsza liczba" ElseIf intnum = 15 Then Debug.Print "To jest największa liczba"
Else Debug.Print "To jest liczba większa od 1 i mniejsza od 15" End If End Sub Instrukcja Select Case Zastępuje wielokrotne używanie instrukcji ElseIf