Visual Basic for Applications Wstęp

Transkrypt

Visual Basic for Applications Wstęp
Visual Basic for Applications
Materiały źródłowe: http://www.vbamania.estrefa.pl
2008-01-14
Wstęp
Visual Basic for Applications to język programowania, dołączony do wielu aplikacji.
Wspierają go między innymi: Cały pakiet MS Office (tzn. Word, Excel, Acces, PowerPoint,
Outlook), AutoCAD, CorelDraw oraz Corel PhotoPaint, Intellicad i Visio. W tych różniących się
aplikacjach identyczny jest interface języka, identyczna jest składnia, takie same słowa
kluczowe i instrukcje. Różnica polega tylko na różnych obiektach i ich metodach oraz
właściwościach związanych z aplikacją macierzystą.
Obiekt to dowolny element składowy aplikacji (np. zakres komórek, arkusz, otwarty plik).
Oprócz tego obiektem są takie elementy jak paski narzędzi, a także - co chyba najważniejsze
dla elastyczności programowania w VBA - sama aplikacja macierzysta, a także inne aplikacje,
wspierające VBA i zainstalowane w systemie. Właściwość to prostu cecha obiektu. Może
ona określać np. jego wielkość kolor, położenie na ekranie, jego stan, tzn. czy jest on
dostępny czy widoczny dla użytkownika. Metoda to funkcja zmieniająca właściwości obiektu.
Edytor VBA.
W większości aplikacji skrótem klawiaturowym, uruchamiającym edytor VBA jest ALT-F11.
Inna metodą jest wybranie z menu (najczęściej Tools - Narzędzia) odpowiedniego polecenia.
Po uruchomieniu edytora pojawi się jego okno, w zasadzie identyczne we wszystkich
aplikacjach.
Na poprzednim rysunku przedstawione są elementy składowe okna edytora VBA:
1. Paski narzędzi
2. Eksplorator projektu
W tym okienku widać otwarty projekt, czyli zbiór elementów składających się na nasza
aplikacje. W przypadku Excela plik projektu to po prostu otwarty plik *.xls.
Projekty składają się z modułów, czyli okienek z wpisanym kodem. Standardowo wszystkie
aplikacje mają możliwość wstawania następujących rodzajów modułów:
- moduł kodu źródłowego - moduł, w którym można umieścić tylko kod programu.
- moduł formularza - czyli projekt formularza wraz z kodem obsługującym operacje, które
użytkownik może dokonać z formularzem i jego elementami składowymi (np. wciśnięcie
przycisku, zmiana zawartości pola tekstowego, zamkniecie formularza).
- moduły klas - to takie moduły w których użytkownik może definiować własne obiekty z ich
właściwościami, metodami i zdarzeniami.
- inne moduły, widoczne w zależności od aplikacji macierzystej. W przypadku Excela
widoczne są ThisWorkbook, reprezentujący otwarty skoroszyt Excela oraz Arkusze (może ich
być kilka) - reprezentujące arkusze w otwartym skoroszycie.
3. Właściwości.
W tym okienku pojawiają się właściwości zaznaczonych elementów. (np. nazwa
projektowanego formularza, napis na zaznaczonym przycisku, a także nazwa projektu VBA).
4. Okno kodu/ formularza.
W tym oknie wpisujemy kod programu, czy funkcje i procedury, będące elementarnymi
cegiełkami programu. Jeżeli projektujemy formularz, to oprócz wpisywania kodu można także
tworzyć formularz przy użyciu palety Toolbox.
5. Paleta Toolbox (Przybornik) - stąd pobiera się elementy składowe formularza (etykiety,
przyciski, pola tekstowe itp.).
Procedury i funkcje
Kod programu VBA składa się z instrukcji pogrupowanych w procedury i funkcje.
Procedura to ciąg instrukcji, zawarty pomiędzy słowami kluczowymi Sub a End Sub.
Przykładowa procedura, obliczającą sumę dwu liczb, przedstawiona jest poniżej:
Sub Oblicz()
Dim liczba1 As Double
Dim liczba2 As Double
Dim wynik As Double
liczba1 = 10
liczba2 = 2.56
wynik = liczba1 + liczba2
MsgBox "Wynik:" & wynik
End Sub
Po słowie kluczowym Sub występuje nazwa procedury i dwa nawiasy. W nawiasach mogą
występować argumenty, czyli dane, przekazywane do procedury przez inna procedurę.
Następny blok instrukcji (trzy wiersze, zaczynające się od słowa kluczowego Dim) to
deklaracja zmiennych - czyli zarezerwowanie w pamięci komputera miejsca na dane.
W Visual Basicu deklaracja zmiennych nie jest niezbędna, gdyż kompilator sam
niezadeklarowane zmienne określa jako typ Variant. Jest to jednak bardzo rozbudowany typ
danych i zajmuje dużo miejsca w pamięci. Dlatego też deklarowanie zmiennych jest dobrym
sposobem na optymalizowanie zużycia zasobów komputera.
Następne wiersze to już instrukcje podstawienia, do zmiennych liczba1 i liczba2 są
przypisane odpowiednie wartości, a do zmiennej wynik - ich suma. Ostatni wiersz służy do
wypisania na ekranie wyniku dodawania. Jest to standardowe okienko komunikatu systemu
Windows.
Funkcja jest ciąg instrukcji, występujący pomiędzy słowami kluczowymi Function a
End Function. Od procedury różni się tym, że funkcja zwraca wynik swoich działań.
Function Dodaj(a As Double, b As Double) As Double
Dodaj = a + b
End Function
Funkcja Suma posiada 2 argumenty, a i b określone jako typ Double (liczba rzeczywista),
wynik działania, czyli wartość zwracana przez ta funkcję, również jest określony jako Double.
Wynik tej funkcji to suma argumentów a i b.
Funkcje zdefiniowane w VBA można wywoływać w komórkach arkusza tak jak standardowe
funkcje programu Excel. Powyższą funkcję można wywołać wpisując w komórkę A1 ciąg
znaków: ’=Dodaj(B1;B2)’. Wynikiem będzie suma komórek B1 i B2.
Tworzenie własnych funkcji można wykorzystać do wpisywania złożonych równań często
wykorzystywanych w arkuszu. W poniższym przykładzie pokazano funkcję obliczającą
współczynnik liniowych strat ciśnienia.
W procedurze lub w funkcji można wywoływać inne procedury i funkcje. W poniższym
przykładzie pokazano funkcję obliczającą liniowe straty ciśnienia, wykorzystującą poprzednią
funkcję obliczającą współczynnik liniowych strat ciśnienia.
Podstawowe instrukcje programu VBA
Instrukcja warunkowa If
Jeżeli chcemy by procedura/funkcja wykonała różne zadania w zależności od np. wartości
jakiej zmienne używamy instrukcji If. Poniżej przedstawiono kilka podstawowych składni tej
instrukcji w VBA:
If wyrazenie_logiczne Then {ciag instrukcji}
If wyrazenie_logiczne Then {ciag instrukcji} Else {inny_ciag_instrukcji}
If wyrazenie_logiczne Then
{ciag instrukcji}
Else
{inny_ciag_instrukcji}
End If
Wyrazenie_logiczne to takie wyrażenie które może przyjąć tylko jedna w dwu wartości: True
(Prawda) albo False (Fałsz). Wyrażeniem logicznym może być np. wynik porównania dwu
liczb (np. A<B).
Wyrażenie {ciag_instrukcji) występujące po słowie kluczowym Then reprezentuje instrukcje
wykonywane w przypadku, gdy wyrażenie logiczne posiada wartość True. Jeżeli wartość
wyrażenia wynosi False, realizowane są instrukcje po słowie kluczowym Else.
Instrukcja wyboru Select Case
W przypadku instrukcji If...Then...Else mamy do wybory tylko dwie sytuacje. Jeżeli chcemy
sterować przebiegiem programu w zależności od większej ilości warunków, stosujemy
Instrukcje Select Case. Jej składnia wygląda następująco:
Select Case wartosc_badana
Case wartosc_1
{ciag_instrukcji_1}
Case wartosc_2
{ciag_instrukcji_2}
....
Case wartosc_n
{ciag_instrukcji _n}
Case Else
{ciag_instrukcji}
End Select
W zależności od wartości wyrażenia wartosc_badana wykonywane będą odpowiednie
instrukcje. W przypadku, gdy wartosc_badana będzie równa wartosc_1 to wykonywany
będzie ciag_instrukcji_1, analogiczne dla pozostałych przypadków. W przypadku, gdy
wartosc_badana nie będzie równa żadnej z wymienionych wartości , wykonywany będzie ciąg
instrukcji po wierszy Case Else.
Instrukcje pętli
Pętle
to
bardzo
użyteczne
struktury
programistyczne,
umożliwiające
wykonywanie
powtarzających się operacji. Mogą zostać wykorzystane na przykład do obliczeń iteracyjnych.
Pętla For … Next
Działa ona w następujący sposób: wszelkie instrukcje występujące pomiędzy słowami
kluczowymi For .... i Next zostaną powtórzone tyle razy aż zmienna indeksująca (w
poniższym przykładzie i) osiągnie wartość występującą po słowie kluczowym To.
Procedura wypisująca na ekranie znaki o kodach ASCII od 65 do 75.
Sub WypiszKody ()
Dim strMsg As String
For i = 65 To 75
strMsg = strMsg & Chr(i) & vbCrLf
Next i
MsgBox strMsg
End Sub
Innym przykładem może być pętla liczącą z krokiem 2:
For i = 2 To 10 Step 2
...
Next i
albo wstecz:
For intLicznik = 10 To 1 Step -1
...
Next intLicznik
Słowo kluczowe Step nie jest konieczne i jeżeli je pominiemy pętla liczy w górę z krokiem 1.
W każdej chwili, niezależnie od od stanu licznika możemy opuścić pętle poprzez użycie
instrukcji Exit For.
Pętla For ... Next jest wygodna w zastosowaniu w przypadku gdy mamy ściśle określoną
liczbę kroków do wykonania.
Pętla Do … Loop
Jeżeli liczba powtórzeń nie jest znana to wygodniej jest zastosować pętlę Do...Loop. Składnia
tej instrukcji jest następująca:
Do
...
Loop [Until {wyrażenie_logiczne}|While {wyrażenie_logiczne}]
albo:
Do [Until {wyrażenie_logiczne}|While {wyrażenie_logiczne}]
...
Loop
Wykonanie pętli Do...Loop jest zależne od warunków logicznych występujących po słowach
kluczowych Until i While (w kodzie może pojawić się tylko jedno z nich). Angielskiemu słowu
until odpowiada polskie wyrażenie "aż do". Pętla z tym słowem jest wykonywana aż
wyrażenie logiczne osiągnie wartość logicznej jedynki (True - prawda).
Natomiast słowo while oznacza "dopóki" i taka pętla wykonywana jest dopóki wyrażenie
logiczne posiada wartość logiczną True; gdy osiąga ono wartość False wykonywanie
instrukcji w pętli jest przerywane.
Jeżeli sprawdzenie warunku logicznego występuje w linii ze słowem Loop (pierwszy
przykład), pętla wykona się co najmniej raz, niezależnie od wartości wyrażenia logicznego.
Wykonywanie pętli Do...Loop może zostać przerwane w dowolnym momencie poprzez użycie
instrukcji Exit Do .
Pętla For Each …
Szczególnym rodzajem pętli jest pętla For Each..., "przebiegająca" po wszystkich elementach
kolekcji.
Oto przykład użycia tej pętli, w którym wszystkie otwarte w Excelu skoroszyty zostaną
zamknięte, a ewentualne zmiany w nich - zapisane.
Dim oWbk As Workbook
For Each oWbk in Workbooks
oWbk.Close SaveChanges: = True
Next oWbk
Jak widać pojedynczy element kolekcji jest tutaj reprezentowany przez zmienną obiektową
(oWbk i oLayer). Jest to bardzo wygodny sposób umożliwiający dostęp do właściwości i
metod grupy obiektów. Istotne jest to, że usuwanie elementów z kolekcji może odbywać się
tylko w pętli For Each..., użycie do tego pętli np. For ...Next spowoduje wygenerowanie
komunikatu o błędzie.