Excel bazuje w luźny sposób na idei programowania obiektowego. W tej części kursu skupimy się na modelu obiektowym Excela, czyli zestawie obiektów, które są dostępne w każdej chwili dla programisty.Obiekt jest pewnego rodzaju pojemnikiem odzwierciedlającym jakiś element Excela. Jest on identyfikowany przez nazwę i zawiera:
- atrybuty (property)
- metody (methods)
- zdarzenia (events)
Do obiektów nie odwołujemy się bezpośrednio, tylko przez ich atrybuty i metody.
Obiekt.identyfikator[.identyfikator]
Identyfikator może być metodą, która wykonuje jakieś działanie (dokładnie tak jak procedura lub funkcja). Może też być atrybutem, który jest jakąś zwykłą wartością lub kolejnym obiektem. W ten sposób możemy tworzyć cały łańcuszek, na którego końcu musi być jakiś atrybut lub metoda. Poniżej znajduje się kilka przykładów, które przybliżają ten temat. Skoro wiemy już jak uruchamiać procedury, proponuję uruchomić każdy z poniższych przykładów i wprowadzić w nim różne zmiany. Oczywiście przykłady te należy zawrzeć w procedurze.
Przykład 1.
Worksheets(1).Select
Worksheets(1) jest obiektem oznaczającym pierwszy arkusz a Select jest metodą. W wyniku takiej instrukcji pierwszy arkusz zostanie zaznaczony.
Przykład 2.
Worksheets(1).Name = "Zielony"
Name jest atrybutem Obiektu Worksheet i oznacza jego nazwę. Zmieniamy w ten sposób nazwę na "Zielony".
Przykład 3.
NazwaArkusza = Worksheets(1).Name
W ten sposób nadajemy zmiennej NazwaArkusza wartość nazwy pierwszego arkusza.
Przykład 4.
Application.Workbooks("Zeszyt1").Worksheets("Arkusz1"). _ Range("a1").Value = "napis"
Powyżej mamy łańcuszek obiektów. Obiekt z prawej strony każdej kropki jest atrybutem obiektu z lewej strony tej samej kropki. Na samym końcu mamy atrybut będący wartością komórki A1 w arkuszu Arkusz1 w skoroszycie Zeszyt1.
Przykład 5.
Niektóre metody przyjmują argumenty, wywołuje się je podobnie jak zwykłe procedury.
Worksheets.Add Worksheets(1), , 1
Powyższa metoda dodaje nowy arkusz i może przyjąć cztery argumenty:
- Before - przed którym arkuszem ma być dodany nowy,
- After - po którym arkuszu ma być dodany nowy,
- Count - ile arkuszów ma być dodanych
- Type - jakiego typu mają być nowe arkusze
Powyżej podałem pierwszy i trzeci argument. Drugi został pominięty, więc między przecinkami jest puste miejsce. Wszystkie argumenty, które znajdują się na końcu są już pominięte, nie trzeba stawiać przecinków, Excel domyśla się, że nie chcemy ich przekazać.
Argumenty można też dodać poprzez nazwy, jest to szczególnie przydatne dla metod, które mają dużo, np. kilkanaście argumentów. Nie musimy wtedy stawiać dużo zbędnych przecinków. Instrukcję
Worksheets.Add Worksheets(1), , , xlWorksheet
można tez zapisać:
Worksheets.Add before:=Worksheets(1), Type:=xlWorksheet
Przykład 6.
Część metod może też zwracać wartości (tak jak funkcje). Np. powyższa metoda zwraca obiekt nowego arkusza.
Sub dodaj_arkusz()
Dim NowyArkusz As Worksheet
Set NowyArkusz = Worksheets.Add(before:=Worksheets(1), _ Type:=xlWorksheet)
NowyArkusz.Name = "nowy arkusz"
End Sub
Aktywny obiekt
Przez prawie cały czas pracy z Excelem jakieś obiekty są zaznaczone. Czyli zostały kliknięte przez użytkownika. Są to:
- ActiveCell - zaznaczona komórka,
- ActiveChart - zaznaczony wykres,
- ActivePrinter - domyślna drukarka,
- ActiveSheet - aktywny arkusz,
- ActiveWindow - otwarte okno
- ActiveWorkbook - wybrany skoroszyt
Obiekty domyślne
Zobaczmy dwie poniższe instrukcje:
Application.Workbooks("Zeszyt1").Worksheets("Arkusz1").Range("A1"). _ Value = "napis"
Range("A1") = "napis"
Jeżeli mamy zaznaczony Arkusz1 w skoroszycie Zeszyt1, obie instrukcje wykonają dokładnie to samo. Drugą instrukcję Excel tak naprawdę rozumie jako:
Application.ActiveWorkbook.ActiveSheet.Range("A1").Value = "Napis"
Czyli przed Range("A1") wstawia aktywne obiekty, oszczędza Ci jednak pisania. Musisz się zadeklarować, jeżeli chcesz się odwołać do arkusza lub skoroszytu, które nie będą zaznaczone w czasie wykonywania kodu. Np.:
Worksheets("Arkusz2").Range("a1") = "napis"
Workbooks("Zestawienie sprzedaży").Worksheets("podsumowanie"). _ Range("A1") = "napis"
W przykładzie Range("A1") brakuje też atrybutu value. Jest to atrybut domyślny, wartość komórki jest jej najważniejszą cechą i Excel w takim przypadku nie wymaga podania atrybutu.
Konstrukcja with
Już wcześniej spotkaliśmy się z konstrukcją With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5287936
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Jest to kolejne ułatwienie, które udostępnia nam edytor VBA. Powyższy kod znaczy to samo co poniższy, tylko jest bardziej czytelny.
Selection.Interior.Pattern = xlSolid
Selection.Interior.PatternColorIndex = xlAutomatic
Selection.Interior.Color = 5287936
Selection.Interior.TintAndShade = 0
Selection.Interior.PatternTintAndShade = 0
Zamiast pisać Selection.Interior pięć razy, piszemy tylko raz.
Skąd czerpać informacje o obiektach?
Obiekty, metody i atrybuty w modelu obiektowym Excel'a można liczyć w tysiące i pewnie dla początkującego programisty jest to przytłaczające. Najważniejsze obiekty szybko jednak zapadają w pamięć. Na pewno najlepiej zapoznać się przede wszystkim z poniższymi obiektami Range, Worksheet i Workbook. Poświęcę im niedługo osobną część kursu.
Bardzo przydatnym narzędziem jest nagrywarka. Jeżeli chcę usunąć arkusz, co bez problemu umiem zrobić "tradycyjnie", wystarczy, że nagram tą czynność i wygeneruję poniższy kod.
Sheets("Arkusz3").Select
ActiveWindow.SelectedSheets.Delete
Wiem już jaka metoda odpowiada za usuwanie arkusza. Wiem już co nieco o modelu obiektowym, mogę więc zastąpić ten kod prostszym i pominąć zaznaczanie.
Sheets("Arkusz3").Delete
Niedługo dowiem się co nieco na temat zmiennych, więc mogę pytać użytkownika o nazwę arkusza do usunięcia
Dim NazwaArkusza As String
NazwaArkusza = InputBox("Podaj nazwę arkusza do usunięcia")
Sheets(NazwaArkusza).Delete
MSDN
Bardzo dobrym źródłem jest portal wiedzy prowadzony przez Microsoft o nazwie MSDN. Zgromadzona jest tam ogromna ilość informacji na temat bardzo różnych produktów Microsoftu. Listę obiektów dla poszczególnych wersji Excel'a można znaleźć tutaj:
Trudno mi powiedzieć jak długo powyższe linki będą działać. Z mojej praktyki jednak wynika, że najłatwiej jest wpisać w google:
Excel MSDN "nazwa obiektu i ewentualnie metody lub atrybutu"
i od razu wśród pierwszych wyników pojawią nam się łącza do odpowiednich stron MSDN.
Przeglądarka obiektów
Jeżeli nie mamy dostępu do internetu, możemy posłużyć się wbudowaną przeglądarką obiektów. Została ona jednak usunięta w wersji 2013 Excel'a, więc nie ma co się do niej przyzwyczajać.
- Edytując moduł wybierz w górnym menu View/Object Browser lub naciśnij F2.
- Upewnij się, że wybrana jest pozycja
- Lewe okno zawiera listę obiektów a prawe listę atrybutów, metod i zdarzeń danego obiektu
- Klikając prawym klawiszem na atrybucie można wybrać Help aby uzyskać wyczerpujący opis danego elementu
Subskrybuj RSS, lub polub blog na Facebooku aby otrzymywać najnowsze informacje o rozwoju kursu.
