Cechą wspólną wszystkich programów Microsoft Office jest możliwość automatyzacji pracy dzięki VBA. Składnia jest taka sama – różne są natomiast obiekty. W Excelu pracujemy głównie na komórkach, arkuszach i plikach – w Wordzie na dokumentach, w Outlooku na e-mailach, w Power Poincie na prezentacjach i slajdach, zaś w Accessie na bazach danych, kwerendach i tabelach. W artykule tym opisuję podstawowe elementy języka VBA, przybliżając takie pojęcia jak obiekt, kolekcja, hierarchia, właściwość, metoda oraz parametr.
Języki obiektowe i proceduralne
Skrót VBA oznacza Visual Basic for Applications i jest językiem programowania wymyślonym przez firmę Microsoft, służącym do automatyzacji pracy na plikach Office. Słowo BASIC oznacza tu odwołanie do mocno już leciwego języka BASIC. VBA jest jego wersją obiektową, ponieważ sam BASIC jest językiem proceduralnym.
O co w tym wszystkim w ogóle chodzi? Otóż języki proceduralne bardziej przypominają język potoczny, czyli ten mówiony. Bazują one bowiem na schemacie czasownik-obiekt. Popularny zwrot Witaj świecie! jest właśnie typową instrukcją napisaną w języku proceduralnym. Podobnie takie zwroty jak np. Umyj okno, Włącz światło, Odpal auto, Podaj cukier czy Załóż czapkę.
W myśleniu obiektowym jest odwrotnie, to obiekt jest najważniejszy. W instrukcji VBA napisalibyśmy Świat.Witaj, Okno.Umyj, Światło.Włącz, Cukier.Podaj czy Czapka.Załóż.
Obiekty w życiu codziennym i… Excelu
Czym dokładnie są obiekty? Najprościej możemy je porównać do rzeczowników, ale nie tylko do przedmiotów. Konkretnym obiektem może być np. rower sąsiada, drzwi w naszym pokoju, drukarka na stole czy piłka do kosza, którą trzymamy w szafie.
W świecie mamy więc multum obiektów – i podobnie jest w Excelu. Dobra wiadomość jest taka, że na początku naszej przygody z VBA, wystarczy opanować cztery główne.
- Komórki. Jest najważniejszy ze wszystkich, ale najbardziej nieprecyzyjny. Odnosi się do pojedynczej komórki lub zakresu komórek (tabelka, wiersz lub wiersze, kolumna lub kolumny).
- Arkusz. Odnosi się do pojedynczej zakładki w pliku.
- Skoroszyt. Odnosi się do całego pliku Excela.
- Aplikacja. Odnosi się do całej aplikacji Excel (wszystkie otwarte w danej sesji pliki).
Hierarchia czyli „znaj swoje miejsce”
Wśród obiektów Excela obowiązuje niezmienna hierarchia. Mamy tu więc różne poziomy struktury – mamy nadrzędność i podległość. Obiekt, który stoi stopień wyżej w hierarchii jest „rodzicem”, zaś obiekt mu podrzędny, jego „dzieckiem”.
Model hierarchiczny Excela możemy przyrównać do drzewa genealogicznego naszej rodziny. Przykładowo, my i nasze rodzeństwo jesteśmy w jednej linii. Jesteśmy rodzicami dla naszych dzieci, ale jesteśmy też dziećmi dla naszych rodziców. Nasi rodzice są z kolei dziećmi naszych dziadków… I w ten sposób należy patrzeć na hierarchię obiektów w VBA.
Na samym szczycie stoi obiekt Application, który reprezentuje całego Excela. Jest on rodzicem m.in. dla wszystkich otwartych plików. Następnie taki pojedynczy plik jest rodzicem dla arkuszy, zaś pojedynczy arkusz jest rodzicem dla wszystkich komórek, które istnieją w jego obrębie.
Mamy tu więc cztery najważniejsze obiekty Excela i bardzo jasno określoną hierarchię między nimi.
Kolekcja jako zbiór obiektów tego samego typu
Zrozumienie tego czym jest kolekcja jest zadaniem łatwym.
W życiu codziennym zarówno auto jak i rower posiadają kolekcję kół lecz tylko auto posiada kolekcję drzwi. Dom posiada m.in. kolekcję pokoi. Zestaw kuchenny może składać się ze stołu i kolekcji czterech krzeseł. Drukarka laserowa może posiadać kolekcję kolorowych tonerów. Człowiek posiada także wiele kolekcji np. rąk, nóg, oczu czy uszu… Każda z rąk i nóg posiada dodatkowo kolekcję palców.
Czyli kolekcja występuje zawsze w liczbie mnogiej. W VBA najczęściej do nazwy obiektu dodaje się literkę s na końcu, ponieważ tak to wygląda w języku angielskim. Mamy więc obiekt arkusza czyli Worksheet, ale też kolekcję arkuszy czyli Worksheets. Mamy obiekt skoroszytu czyli Workbook, ale też kolekcję skoroszytów czyli Workbooks.
Przykładowy kod w języku VBA
Skoro wiemy już czym jest obiekt, kolekcja i hierarchia to zastanówmy się jak mogłaby wyglądać przykładowa linia kodu w języku VBA?
Kod, który wstawi cyfrę 1 do komórki A1 pierwszego arkusza może wyglądać tak…
1 2 3 4 5 |
Sub WstawJedynke() Application.Workbooks(1).Worksheets("Arkusz1").Range("A1").Value = 1 End Sub |
Do elementu kolekcji (konkretnego obiektu) możemy się odwoływać na dwa sposoby:
- Poprzez jego nazwę np. „Arkusz1”.
- Poprzez jego pozycję np. (1).
W praktyce nie ma potrzeby, aby odwołując się do pliku, podawać obiekt najwyższego rzędu. Obiekt Application jest bowiem obiektem domyślnym. Poniższy kod również będzie ok.
1 2 3 4 5 |
Sub WstawJedynke() ThisWorkbook.Worksheets("Arkusz1").Range("A1").Value = 1 End Sub |
Docelowo ten kod możemy jeszcze skrócić korzystając z nazwy kodowej arkusza.
1 2 3 4 5 |
Sub WstawJedynke() Arkusz1.Range("A1").Value = 1 End Sub |
Właściwość czyli cecha obiektu
Każdy obiekt posiada pewne specyficzne cechy, które go identyfikują i wyróżniają spośród innych obiektów. Ta cecha w języku VBA nazywana jest właściwością.
Przykładowo, cechą auta może być kolor, producent, typ paliwa czy skrzynia biegów. Nieco inne cechy będzie posiadał rower. Co prawda, będziemy mieć tam również kolor i producenta, ale próżno szukać takich cech jak typ paliwa czy skrzynia biegów. Znajdziemy tam jednak rozmiar ramy czy typ amortyzacji.
I teraz kilka ważnych rzeczy…
Po pierwsze, właściwości posiadają przypisane wartości. W przypadku auta, kolor może być czerwony, producentem może być Mercedes, paliwo to benzyna, a skrzynia biegów może być automatyczna. W przypadku rowera, rama może mieć np. 21 cali, a amortyzacja może być tylko przednia.
Po drugie, właściwościami obiektów mogą być mniejsze obiekty. Przykładowo, właściwością auta jest silnik, który sam posiada takie właściwości jak moc czy pojemność skokowa. W przypadku rowera praktycznie każda część jest osobnym obiektem, który posiada jakieś właściwości. Na dobrą sprawę rama oprócz rozmiaru ma jeszcze materiał z jakiego została zrobiona np. aluminium.
Po trzecie, właściwościami obiektów mogą być całe kolekcje. Przykładowo, właściwością obiektu auto jest np. kolekcja drzwi lub kół.
Po czwarte, wartości właściwości zwracają konkretny typ danych. Przykładowo, kolor auta czy producent będzie tekstem, ale np. liczba drzwi w aucie będzie małą liczbą całkowitą. Rok produkcji będzie dużo większą liczbą całkowitą, zaś przebieg auta wielką liczbą – liczoną w dziesiątkach tysięcy. Informacja o tym czy auto posiada np. tempomat będzie informacją zerojedynkową. Podobnie jak informacja czy rower posiada stopkę lub bagażnik. W przypadku rowera, rozmiar koła będzie liczbą zmiennoprzecinkową, ponieważ koło może mieć np. 27,5 cala.
Podobnie jest z obiektami w Excelu. Pojedyncza komórka posiada m.in. swój unikatowy adres, numer wiersza czy wartość.
1 2 3 4 5 |
Sub WlasciwosciKomorki() Debug.Print ActiveCell.Address, ActiveCell.Row, ActiveCell.Value End Sub |
Pojedynczy arkusz posiada unikatową nazwę (zakładkową i kodową). Posiada też unikatowy numer, który określa jego pozycję w całym pliku oraz informację dotyczącą jego widoczności.
1 2 3 4 5 |
Sub WlasciwosciArkusza() Debug.Print Arkusz1.Name, Arkusz1.Indeks, Arkusz1.Visible End Sub |
Cały plik Excela posiada np. właściwość, która pozwala odczytać jego lokalizację na dysku, a nawet informację o tym, czy są w nim jakieś zmiany do zapisania.
1 2 3 4 5 |
Sub WlasciwosciSkoroszytu() Debug.Print ThisWorkbook.FullName, ThisWorkbook.Saved End Sub |
Metoda czyli akcja związana z obiektem
Oprócz właściwości, obiekty posiadają tzw. metody. Skoro wiemy, że obiekt jest rzeczownikiem, a właściwość przymiotnikiem, to metoda będzie czasownikiem. Oznacza ona bowiem jakąś akcję związaną z obiektem. Podobnie jak właściwości, metody także charakteryzują dany obiekt.
Auto możemy np. zaparkować czy zatankować, możemy nim skręcić lub po prostu je uruchomić. Rower, podobnie jak auto, możemy umyć lub oddać do mechanika. Nie możemy go jednak zatankować, ale możemy za to przewieźć w bagażniku na dachu auta.
Piłkę możemy napompować, podobnie jak auto czy rower, ale nie możemy napompować drukarki.
A jak się to ma do Excela? Komórkę możemy np. wyczyścić, a w zakresie komórek zamienić kropkę na przecinek. Arkusz możemy aktywować lub usunąć. W pliku możemy zapisać zmiany, ale możemy go także zamknąć.
1 2 3 4 5 |
Sub WyczyscZawartosc() Arkusz1.Range("A1:D3").ClearContents End Sub |
Warto także dodać, że metody mogą nam zmieniać wartości dla właściwości. Przykładowo, metoda Zatankuj dla obiektu Auto, zwiększy nam poziom paliwa w zbiorniku. Metoda Chudnij dla obiektu Człowiek zmniejszy nam wartość dla właściwości Waga. Metoda Usuń arkusz, zmniejszy nam liczbę arkuszy w pliku.
Parametr czyli szczegóły akcji
Metody zazwyczaj posiadają parametry, które doprecyzowują daną akcję. Parametr możemy potraktować jako przysłówek.
Autem możemy skręcić i wiemy, że jest to metoda, ale to parametr określi nam kierunek tego skrętu np. w lewo. Możemy także zatankować, ale to parametr ile określi nam liczbę litrów.
W Excelu możemy np. skopiować komórkę metodą Copy, ale to parametr Destination, określa nam, gdzie mamy go wkleić. Jeżeli parametr jest podany w nawiasie kwadratowym, oznacza, że jest on opcjonalny.
1 2 3 4 5 |
Sub KopiujKomorke() Arkusz1.Range("A1").Copy Destination:=Arkusz1.Range("B1") End Sub |
Właściwości i metody kolekcji
Podobnie jak pojedyncze obiekty, także kolekcje posiadają swoje właściwości i metody. Możemy np. zamknąć jednocześnie oboje oczu – w VBA zapisalibyśmy to jako Oczy.Zamknij, a dokładnie Eyes.Close.
Co jest jeszcze ważne w przypadku kolekcji?
Po pierwsze. Praktycznie każda kolekcja posiada pewne specyficzne właściwości. Count (zlicza obiekty w kolekcji), Add (pozwala dodać obiekt do kolekcji), Open (pozwala otworzyć wybrany obiekt).
1 2 3 4 5 |
Sub WyswietlLiczbeArkuszy() MsgBox ThisWorkbook.Worksheets.Count End Sub |
Po drugie, do konkretnego elementu kolekcji możemy się odnieść albo za pomocą jego nazwy, albo jego indeksu, o czym już wspomniałem wcześniej.
1 2 3 4 5 6 |
Sub ZmienNazweArkusza() ThisWorkbook.Worksheets("Arkusz3").Name = "Nowa nazwa" ThisWorkbook.Worksheets(3).Name = "Arkusz3" End Sub |
Podsumowanie
Zrozumienie podstawowych pojęć takich jak obiekt, kolekcja, hierarchia, właściwość, metoda oraz parametr pozwala na efektywne korzystanie z języka VBA. Dzięki tym koncepcjom można tworzyć wydajne i elastyczne rozwiązania automatyzujące pracę w Excelu. Dalsza nauka VBA wymaga praktyki w pisaniu kodu oraz zapoznawania się z dokumentacją, która szczegółowo opisuje możliwości poszczególnych obiektów.