VBA jako obiektowy język programowania
Każdy, kto popracuje dłużej z Excelem, natknie się na informacje o makrach, czyli języku programowania VBA (Visual Basic for Applications). Jest to język programowania stosowany w aplikacjach Microsoftu (m.in. Excel, Word, Access, PowerPoint), który działa niejako za kulisami tych aplikacji i umożliwia m.in. automatyzację wielu czynności. W tym artykule omówiona zostanie dokładniej jedna jego cecha, a mianowicie co znaczy, że jest to obiektowy język programowania.
Czym jest obiekt w VBA?
W wielu aspektach obiekt w języku programowania przypomina obiekt w realnym świecie. Zaczynając analizę od obiektów w realnym świecie, np.: piłka, samochód, zegarek, kocica Milka, łatwiej zrozumiemy, czym są obiekty (i ich właściwości) w VBA. Trzeba zaznaczyć, że w każdym przypadku chodzi o jeden konkretny obiekt, a nie jego klasę (o klasach pomówimy później), czyli piłka mojego syna, nasz samochód, nasza kocica Milka.
W Excelu obiektami są np.: wykres, komórka, zakres komórek, arkusz, tabela przestawna, plik, a nawet sam Excel (Application) jest obiektem. Praktycznie wszystko, z czym mamy do czynienia w Excelu, jest obiektem.
Przyjrzyjmy się obiektowi dokładniej na przykładzie Budzika (Rysunek 1).
Każdy obiekt w języku programowania ma swoje cechy/właściwości oraz metody/procedury. Po analizie naszego Budzika widzimy, że jego cechą/właściwością jest godzina, którą pokazuje kolor wskazówek, kolor obudowy, wysokość itp.
Analizując obiekt Excela – Komórkę, można stwierdzić, że jej właściwościami są m.in. wpisana wartość, wysokość, szerokość, kolor czcionki i kolor wypełnienia.
Trudniej zrozumieć, czym jest metoda/procedura obiektu. Możemy sobie wyobrazić, że jest to czynność, którą my wykonujemy z naszym obiektem, albo wykonuje sam obiekt. Metodą dla Budzika może być np. włączenie alarmu. Nie zawsze jest to jasne, bo ustawienie godziny może się wydawać czynnością, ale tak naprawdę jest zmianą właściwości. Z kolei jeśli powiemy, że musimy przestawić zegar do przodu o godzinę, bo np. była zmiana czasu na letni, to już będzie procedura, ponieważ najpierw sprawdzamy, jaka jest właściwość godziny Budzika, a następnie dodajemy do niej godzinę i dopiero tę obliczoną godzinę wpisujemy do właściwości Budzika.
W przypadku komórki metodami/procedurami są m.in. zaznaczenie komórki (Select), skopiowanie (Copy) oraz wyczyszczenie jej zawartości (Clear). Metoda Clear jest równoważna wpisaniu w VBA do komórki pustej wartości/niczego (przykładowy kod VBA: Range(„A1”).Value = „”), ale jest metodą ze względu na sposób implementacji klasy „Komórka” i zawsze to rozstrzyga, czy dany element obiektu jest jego właściwością, czy metodą.
Obiekty w Excelu mają dużo właściwości i metod. Na szczęście VBA ma przyjazny sposób odwoływania się do nich. Jeśli napiszesz w kodzie odwołanie do konkretnego obiektu i zaraz po nim postawisz kropkę (np. Range(„A1”). ), to edytor VBA wyświetli listę wszystkich właściwości i metod danego obiektu (Rysunek 2). Metody są oznaczone ikoną ruchomego pudełka, a właściwości – ikoną palca wskazującego na tekst.
Hierarchia obiektów
Najbardziej charakterystyczna hierarchia w Excelu zaczyna się od komórki (Range(„A1”)). Jeśli pracowałeś już z Excelem, to jasne jest, że komórka jest częścią jakiegoś zakresu. Szczególnym rodzajem zakresu jest arkusz (Worksheets(„Arkusz1”)). Powinno być jasne, że arkusz jest wyżej w hierarchii niż komórka, ponieważ zawiera wiele komórek. Z kolei nad arkuszem stoi plik (Workbooks(„Zeszyt1.xlsx”)), który może zawierać wiele arkuszy. A jeszcze wyżej znajduje się Excel (Application), gdyż może pracować z wieloma otwartymi plikami naraz.
W języku VBA na niższe poziomy hierarchii schodzi się analogicznie jak przy odwoływaniu się do właściwości czy metod obiektu, czyli wstawiając kropkę, po precyzyjnym odwołaniu się do obiektu, gdyż obiekt z niższego poziomu hierarchii jest traktowany jako właściwość obiektu z wyższego poziomu.
Pełna ścieżka do zaznaczenia komórki (Select) od poziomu Excela wygląda tak:
Application.Workbooks(“Zeszyt1.xlsx”).Worksheets(“Arkusz1”).Range(“A1”).Select
Na szczęście w VBA praktycznie nigdy nie musimy pisać tak długich odwołań, ponieważ działamy przy założeniu, że odwołujemy się do aktywnego obiektu, czyli jeśli napiszemy tylko Range(“A1”).Select, to VBA zaznaczy nam komórkę A1 na aktywnym arkuszu.
Przykładem z realnego świata może być sytuacja w domu, w którym jestem razem z żoną i proszę ją o włączenie światła. Zakładając, że żona jest w salonie, domyślnie włączy światło w salonie. Jeśli jednak zależałoby mi, żeby włączyła światło w kuchni, a ona dalej jest w salonie, muszę powiedzieć: „Kochanie, włącz światło w kuchni”.
Wykorzystałeś swój limit bezpłatnych treści
Pozostałe 60% artykułu dostępne jest dla zalogowanych użytkowników portalu. Zaloguj się, wybierz plan abonamentowy albo kup dostęp do artykułu/dokumentu.