W dzisiejszej notce chciałbym napisać kilka słów na temat podstaw pracy z obiektami w VBA. Myślę, że informacje tu zawarte przydadzą się zwłaszcza tym, którzy zaczynają dopiero swoją przygodę z programowaniem w VBA.
Obiekt i Kolekcja
Skoro już wiemy, że w VBA wszystko kręci się wokół obiektów, to warto sobie zadać pytanie czym taki obiekt jest i z czego się składa.
Z pomocą przychodzi bardzo trafne porównanie do części mowy. Według tej koncepcji obiekt jest rzeczownikiem. Rzeczownikiem i zarazem obiektem jest np. człowiek, dom czy krzesło.
Zbiór obiektów tego samego typu nazywamy kolekcją. Możemy mówić o “kolekcji” osób w rodzinie, kolekcji pomieszczeń w domu czy kolekcji krzeseł rozmieszczonych wokół stołu.
W języku VBA obiektem najwyższego poziomu jest cała aplikacja czyli Excel, ale do najczęściej używanych należą Workbook (pojedynczy plik), Worksheet (pojedynczy arkusz) i Range (zakres komórek).
Właściwości i Metody
Każdy obiekt posiada właściwości i metody.
Właściwości charakteryzują dany obiekt, metody wykonują czynności związane z obiektem. Metody mogą wpływać na właściwości zmieniając ich wartości. Niektóre właściwości mogą być tylko do odczytu i nie da się ich zmienić.
Przykładowo. Jeżeli obiektem jest Człowiek, to jego właściwościami mogą być np. Imię, Płeć, Wzrost, Waga. Najłatwiej zmienić jest Wagę – wprowadzając do życia metodę Chudnij. Są jednak właściwości, których zmienić nie możemy np. Data Urodzenia lub Miejsce Urodzenia. Są one tylko do odczytu i żadne metody nie pomogą.
W przypadku pojedynczego arkusza właściwością jest np. jego nazwa, obszar przewijania czy kolor zakładki. Metodą jest skopiowanie arkusza, ale też skasowanie.
Właściwościami obiektu mogą być też kolekcje. W arkuszu mamy m.in. kolekcję komórek i komentarzy. Człowiek zaś posiada kolekcję rąk i nóg. Każda z kończyn posiada kolekcję palców.
Niekonsekwencja
Skoro potrafimy już odróżniać właściwości od metod, to pora trochę skomplikować temat :). Czasami metody stają się rzeczownikami a konkretne działania właściwościami. Ale jak to?
Przykładem metody w VBA jest tekst wstawiony do komentarza. Przykładem właściwości – polecenie sortowania bezpośrednio w arkuszu (metoda Sort jest nadal dostępna dla obiektu Range, ale w Excelu 2007 dodatkowo wprowadzono właściwość Sort dla arkusza!).
Jednym słowem – niezły galimatias i niekonsekwencja. Ale tak naprawdę są to wyjątki i nie ma sensu wchodzić w ten temat głębiej. Najważniejsze to wiedzieć do jakiego obiektu przypisana jest dana właściwość i metoda.
Moduły Klas
Z założenia właściwość zwraca jakąś wartość (czyli tak jak Function w VBA), zaś metoda wykonuje pewną czynność, ale nie zwraca wartości (coś jak Sub w VBA).
Ale w module klasy jest ciut inaczej. Mamy tam instrukcje typu Property Get, które są właściwościami obiektu. Na samej górze modułu niektórzy deklarują zmienne globalne…. One też są właściwościami.
To skoro wiemy jak tworzyć właściwości dla naszych obiektów, to w takim razie jak tworzyć metody? Otóż metodami w module klas są procedury typu Sub i Function. Czyli możemy stworzyć własną metodę, która… zwraca wartość!
Dokładnie tak! Czasami tworzy się metodę, która zwraca w wyniku wartość logiczną PRAWDA/FAŁSZ, aby sprawdzić czy dana czynność została zakończona sukcesem.