W poprzedniej części opisałem podstawowe elementy edytora. Dziś napiszemy pierwszy program. Otwórz nowy moduł i wklej w nim poniższy kod:
Sub Obwodkola() 'program oblicza obwod kola Const pi = 3.14 Dim r As Integer, obw As Single r = InputBox("Podaj promień:") obw = 2 * pi * r Msgbox "Obwod wynosi =" & obwod End Sub
Nasz program działa następująco: W pierwszej linijce definiowana jest stała pi. Następnie komputer rezerwuje w pamięci dwa miejsca w których przechowywany będzie obwód i promień. W kolejnej linijce przy pomocy okienka InputBox wczytywana jest wartość promienia. Program oblicza obwód i wyświetla go w odpowiednim okienku.
Podstawowe informacje o programach
Program w języku VBA wygląda następująco:
Sub NazwaProgramu() [instrukcje] End Sub
Każdy program rozpoczyna się od słowa kluczowego Sub i nazwy procedury wraz z nawiasami. Nazwa procedury nie może: zawierać spacji, pauz, rozpoczynać się od cyfry, być dłuższa niż 256 znaków, a także być identyczna z nazwą polecenia lub funkcji w VBA. Program zawsze kończy się poleceniem End Sub. Aby przerwać działanie programu korzystamy z instrukcji Exit Sub.
Program składa się z instrukcji zapisanych w osobnych linijkach. Długość instrukcji jest dowolna. Aby przerwać instrukcję i kontynuować w kolejnej linii używamy znaku spacji i podkreślenia.
MsgBox "To jest badzo dluga instrukcja _ sklada sie z 2 linijek
Interpreter nie rozróżnia małych i wielkich liter. Tak wiec zapis msgbox oraz MsgBox będzie oznaczał dla niego to samo. Wiersze rozpoczynające się od apostrofu ‘ to komentarze. Komentarze nie są analizowane przez kompilator, a więc nie wpływają na działanie programu.
Zmienne i stałe
Zmienne są podstawą każdego języka programowania. Zmienna (variable) to identyfikator (nazwa) dla miejsca magazynowego (pamięci komputera), która przechowuje wartość jakiegoś typu. Stała to zmienna, która w trakcie działania programu nie zmienia swojej wartości. Ograniczenia dotyczące nazw są takie same jak ograniczenia dotyczące nazw procedur. Składnia deklaracji zmiennej wewnątrz programu wygląda następująco:
Dim nazwaZmiennej [As TypDanych]
Komputer zawsze przechowuje wartości zmiennych w postaci liczbowej (zer i jedynek). Typ zmiennej to sposób w jaki programista chce, aby kompilator widział zmienną, co znacznie ułatwia pracę. Każdy język programowania na wbudowaną listę typów. Najważniejsze typy w VBA to:
Integer (Long)- w zmiennych tego typu mogą znajdować się tylko liczby całkowite z przedziału od -32 768 do 32 767 (lub odpowiednio -2*10^9 do 2*10^9)Single-– ten typ mówi kompilatorowi, ze w zmiennej będą przechowywane liczby rzeczywiste od -1,79∙10^38 do 3,4∙10^38 z dokładnością do sześciu miejsc po przecinku.String– może przechowywać ciąg znaków od 0 do 109 długości.Date– od #01-01-100# do #31-12-9999#.Boolean– zmienna logiczna, może zawierać wartości True albo False
VBA nie wymaga deklaracji zmiennych. Jeżeli nie zadeklarujesz zmiennej interpreter sam spróbuje przypisać jej specjalny typ Variant, i będzie domyślał się jej typu na podstawie instrukcji, których użyłeś. W dalszym ciągu będziemy starali się unikać korzystania ze zmiennych typu Variant, ponieważ:
- Deklarowanie zmiennych pozwala programiście panować nad błędami wynikającymi z pomyłek przy wprowadzaniu danych przez użytkownika.
- Pisząc duże programy często zdarza się przez pomyłkę dwa razy nazwać zmienną tak samo, mimo że ma ona przechowywać różne dane. Znalezienie takiego błędu jest bardzo trudne.
- Jeżeli zawsze będziesz deklarował zmienne, bo popełniając literówkę w nazwie zmiennej będzie to łatwiejsze do wykrycia.
- Nie zadeklarowana zmienna zajmuje w pamięci średnio 2 razy więcej miejsca niż zwykła zmienna
- Szczególnie przy pracy z dużymi zakresami danych (tablicami) praca z właściwymi typami zmiennych przyśpiesza działanie programu (co jak potem pokaze nie jest do końca prawdą).
Reasumując -- deklaruj wszystkie zmienne, a jeżeli potrzebujesz skorzystać z Varianta napisz to wprost.
Option Explicite.Podczas deklaracji zmiennym nadawane są im wartości początkowe:
- Liczbowa = 0
- String = „” (pusty ciąg znaków)
- Variant Empty
- Object Empty
Stałą stosujemy, jeżeli w programie będziemy posługiwali się daną, która nie będzie się zmieniała w trakcie działania programu. Stosowanie stałych nie jest koniecznej (nie wpływa na działanie programu), ale ułatwia późniejszą analizę kodu.
Const NazwaZmiennej As TypDanych = Wartosc
Pisząc duże programy wygodniej zawrzeć w nazwie zmiennej jej typ, tak aby wystarczył rzut oka do zidentyfikowania typu danych. I tak: Integer poprzedzamy przedrostkiem i, Long (l), Single (s), Date (dt), String (str), Object (o).
Wczytywanie i wyświetlanie danych -funkcje MsgBox i InputBox
Każda linijka umieszczona pomiędzy Sub i End Sub to jedno działanie jakie ma wykonać komputer. Instrukcja Msgbox służy do wyświetlania na ekranie komputera okna z tekstem zdefiniowanym przez programistę i/lub oczekiwanie na wybór jednego z przycisków. Każda instrukcja przyjmuje listę argumentów, na podstawie których generuje wynik (podobnie jak funkcja matematyczna). Argumenty mogą być opcjonalne lub wymagane.
Uproszczona składnia Msgbox
MsgBox( TekstKomunikatu [,Przyciski])
Funkcja Msgbox posiada tylko jeden argument wymagany, czyli tekst który ma zostać wypisany na ekranie. Predefiniowane wartości VBA dla składowej przyciski oraz wartości zwracane przez funkcję dokładnie opisane są w pliku pomocy (Msgbox w edytorze zaznaczyć i nacisnąć F1).
Z kolei instrukcja:
NazwaZmiennej = InputBox(„Komunikat na ekranie”)
Powoduje wyświetlenie na ekranie okienka z napisem „Komunikat na ekranie” oraz miejscem na wpisanie wartości zmiennej. Po naciśnięciu przycisku OK. Wartość ta jest przypisywana do zmiennej znajdującej się przed znakiem =.
Instrukcja przypisania
Instrukcja przypisania jest instrukcją VBA wykonującą matematyczne obliczenia i przypisującą wynik zmiennej lub obiektowi. W języku VBA funkcję operatora przypisania spełnia znak =.
Operatory arytmetyczne
Operator to działanie które pozwala nam zmieniać wartości zmiennych. 1)Jeżeli w danym wyrażeniu występuje więcej niż jeden operator oraz nie występują nawiasy to program wykonuje je w następującej kolejności:
- ^ potęgowanie
- – negacja
- *, / mnożenie lub dzielenie
- \ część całkowita z dzielenia
- Mod dzielenie modulo
- -,+ dodawanie i odejmowanie
- & konkatenacja
Z tydzień zajmę się instrukcjami sterującymi.

w funkcji na Obwodkola wkradł się błąd:
Msgbox “Obwod wynosi =” & obwod
a powinno oczywiście być:
Msgbox “Obwod wynosi =” & obw
tu jest błąd:
Msgbox “Obwod wynosi =” & obwod
proszę to porawić