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.