Obiekt jest pewnego rodzaju pojemnikiem odzwierciedlającym jakiś element Excela. Jest on identyfikowany przez nazwę i zawiera:
- atrybuty (property)
- metody (methods)
- zdarzenia (events)
Obiekt.identyfikator[.identyfikator]
Przykład 1.
1 |
Worksheets(1).Select |
Przykład 2.
1 |
Worksheets(1).Name = "Zielony" |
Przykład 3.
1 |
NazwaArkusza = Worksheets(1).Name |
Przykład 4.
1 |
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.
1 |
Worksheets.Add Worksheets(1), , 1 |
- 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
1 |
Worksheets.Add Worksheets(1), , , xlWorksheet |
1 |
Worksheets.Add before:=Worksheets(1), Type:=xlWorksheet |
Przykład 6.
1 2 3 4 5 6 |
Sub dodaj_arkusz() Dim NowyArkusz As Worksheet Set NowyArkusz = Worksheets.Add(before:=Worksheets(1), _ Type:=xlWorksheet) NowyArkusz.Name = "nowy arkusz" End Sub |
Tak jak w przypadku procedur konieczne jest zamknięcie argumentów w nawiasach. Nie znasz jeszcze słowa kluczowego Set. Poznasz je wkrótce. Istotne jest to, że powyżej został dodany nowy arkusz, który został zapamiętany w zmiennej NowyArkusz. Dzięki temu mogłem zmienić jego nazwę.
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:
1 2 3 |
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:
1 |
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.:
1 2 |
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
1 2 3 4 5 6 7 |
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 mniej czytelny.
1 2 3 4 5 |
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.
1 2 |
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.
1 |
Sheets("Arkusz3").Delete |
Niedługo dowiem się co nieco na temat zmiennych, więc mogę pytać użytkownika o nazwę arkusza do usunięcia
1 2 3 4 |
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:
Excel MSDN „nazwa obiektu i ewentualnie metody lub atrybutu”
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.