fbpx

Model Obiektowy w VBA

Wprowadzenie

Niniejsze opracowanie zostało przygotowane z myślą o osobach, które posiadają już podstawową znajomość języka VBA (Visual Basic for Applications) i chcą pogłębić swoje zrozumienie modelu obiektowego w Excelu i wyjść poza ramy nagrywania kodu i drobnych modyfikacji. Zrozumienie hierarchii obiektów oraz zasad pracy z właściwościami, metodami i zdarzeniami stanowi fundament dla efektywnej automatyzacji procesów w arkuszach kalkulacyjnych.

Model obiektowy w VBA (Visual Basic for Applications) to struktura, która umożliwia zarządzanie elementami w aplikacjach Microsoft, takich jak Excel. Jego podstawą są obiekty, które reprezentują rzeczywiste elementy arkusza, na przykład skoroszyty, arkusze, komórki czy wykresy. Dzięki temu możliwe jest tworzenie zautomatyzowanych rozwiązań, które znacząco usprawniają pracę z danymi.

Za pomocą modelu obiektowego można w prosty sposób manipulować danymi, kontrolować wygląd arkuszy czy wykonywać operacje na dużych zbiorach informacji. Korzystanie z modelu obiektowego nie wymaga specjalistycznej wiedzy programistycznej, lecz odrobiny znajomości hierarchii obiektów i ich właściwości lub umiejętności obsługi przeglądarki obiektów Object Browser w edytorze VBA o czym napiszemy później 😉.

Sprawdź kursy Excel VBA!
Jeśli chcesz dowiedzieć się więcej o języku VBA w Excelu i stać się ekspertem w VBA, zachęcamy do wzięcia udziału w naszych kursach Excel VBA!.

Przegląd podstawowych obiektów

Główne obiekty w modelu obiektowym Excela

  1. Application
    Reprezentuje aplikację Excel jako całość. Obejmuje ustawienia globalne, takie jak wyświetlanie alertów czy styl widoku.
  2. Workbooks
    Kolekcja wszystkich otwartych skoroszytów.
    • Workbook
      Pojedynczy skoroszyt, który zawiera arkusze i dane.
  3. Worksheets
    Kolekcja wszystkich arkuszy roboczych w danym skoroszycie.
    • Worksheet
      Pojedynczy arkusz roboczy.
  4. Range
    Zakres komórek, który można modyfikować, formatować czy odczytywać jego wartości.

Obiekty w VBA i Excelu można porównać do rzeczywistych, fizycznych przedmiotów, które posiadają pewne cechy (właściwości), potrafią wykonywać określone działania (metody) i mogą reagować na różne zdarzenia. W kontekście Excela obiektami są wszelkie elementy, które składają się na strukturę programu, takie jak skoroszyty, arkusze, zakresy komórek, wykresy, przyciski, tabele czy nawet cała aplikacja Excel.

Obiekt w Excelu można porównać do różnych rzeczy spotykanych w życiu codziennym. Każdy przedmiot ma swoje cechy, może wykonywać określone funkcje i często reaguje na działania zewnętrzne. Oto kilka przykładów:

Cała aplikacja Excel (Application) jako szafa na skoroszyty

Excel jako aplikacja jest jak biuro, w którym odbywa się praca nad wieloma projektami.

  • Właściwości: ustawienia programu, np. język, wygląd interfejsu.
  • Metody: uruchamianie nowych dokumentów, zamykanie programu.
  • Zdarzenia: np. na otwieranie programu, na wystąpienie jakiejś czynności myszką.

Skoroszyt (Workbook) jako biurowa teczka:

  • Skoroszyt w Excelu można porównać do teczki w biurze, która zawiera różne dokumenty (arkusze robocze).
  • Właściwości: nazwa teczki, liczba dokumentów, czy jest otwarta czy zamknięta.
  • Metody: otwieranie teczki, dodawanie nowych dokumentów, usuwanie zawartości.
  • Zdarzenia: teczka jest otwierana, zapisywana lub zamykana.

Arkusz roboczy (Worksheet) jako kartka:

Arkusz w skoroszycie można przyrównać do kartki w teczce.

  • Właściwości: rozmiar kartki, liczba zapisanych wierszy czy kolumn.
  • Metody: zapisywanie danych, usuwanie danych, drukowanie.
  • Zdarzenia: zmiana zawartości na kartce, zmiana nazwy.

Zakres komórek (Range) jako konkretne pola na kartce

  • Zakres komórek to obszar na kartce, który jest przeznaczony na wpisanie danych lub obliczenia.
  • Właściwości: wartość wpisana w komórkach, kolor tła, formatowanie.
  • Metody: wypełnianie komórek, czyszczenie ich zawartości, kopiowanie.
  • Zdarzenia: zmiana wartości w określonych komórkach, gdy się je zaznaczy, skopiuje itd.

Obiekty w Excelu jako elementy hierarchii

Wszystkie obiekty w Excelu są ze sobą powiązane w hierarchicznej strukturze, co przypomina organizację drzewa.

  • Na szczycie hierarchii znajduje się Application (cała aplikacja Excel).
  • Pod nią są Workbooks (wszystkie otwarte skoroszyty).
  • Każdy skoroszyt zawiera Worksheets (arkusze).
  • Każdy arkusz zawiera Range (zakresy komórek).

Hierarchia w Excelu przypomina proces wykonywania zadania jak we wcześniej opisanym przykładzie biurowym:

  • Najpierw należy wejść do biura (Excel – Application).
  • Następnie trzeba znaleźć odpowiednią teczkę (skoroszyt – Workbook).
  • Wewnątrz teczki wybiera się właściwą kartkę (arkusz – Worksheet).
  • Na kartce można działać tylko na określonym fragmencie (zakres – Range).

Nie można wykonać działań na kartce, jeśli najpierw nie wybrano odpowiedniej teczki, ponieważ nie wiadomo, z którym dokumentem ma być prowadzona praca 😊.

Na szczęście w VBA korzystanie z hierarchii jest uproszczone. Gdy pracuje się w bieżącym skoroszycie lub arkuszu, nie ma konieczności podawania całej ścieżki hierarchii za każdym razem. Excel domyślnie zakłada, że wykonywane działania odnoszą się do aktywnego skoroszytu lub arkusza.

 Można od razu wpisać tekst do komórki A1 bez odwoływania się do całej hierarchii:

Range(„A1”).Value = „Kursy Expose są najlepsze na rynku!”

Zamiast

Application.Workbooks("MójSkoroszyt.xlsx").Worksheets("Arkusz1") .Range(„A1”).Value = „Kursy Expose są najlepsze na rynku!”

Warto pamiętać o hierarchii, aby wiedzieć, jak precyzyjnie wskazać obiekt, gdy konieczne jest działanie na innym arkuszu lub skoroszycie nie uruchamiając tych okien lub arkuszy podczas działania kodu co znacznie przyśpiesza jego realizację.

OBJECT BROWSER – czyli jak znaleźć obiekty, metody i właściwości?

(Nawet bez dostępu do Internetu 😊 )

Jak wyszukać obiekt, następnie jego metody?

Przeglądarka obiektów wbudowana w edytor VBA pozwala szybko znaleźć informacje o obiektach, ich metodach, właściwościach i zdarzeniach. Aby jej użyć:

  1. W edytorze VBA wybiera się zakładkę „Widok” i następnie „Przeglądarka obiektów” lub użyj skrótu klawiszowego F2.
  2. W polu wyszukiwania wprowadź nazwę obiektu, np. „Range”.

W dolnej części przeglądarki można zobaczyć dostępne metody (np. ClearContents), właściwości (np. Value) oraz zdarzenia (np. Change).

Czym są i czym się różnią obiekty, metody, właściwości i zdarzenia?

  • Obiekty to elementy modelu obiektowego, takie jak Workbook, Worksheet czy Range opisane powyżej.
  • Metody to działania, które można wykonać na obiekcie, np. Copy (kopiowanie) czy Delete (usuwanie). Można jest nazwać w pewnym sensie „funkcjami”, które coś konkretnego wykonują.
  • Właściwości określają cechy obiektów, np. Name (nazwa arkusza) czy Value (wartość komórki).
  • Zdarzenia to sytuacje, które wywołują określone akcje na, przed lub po, np. zmianie wartości w komórce, zapisaniu pliku, aktywacji arkusza itd.

Przykłady użycia

a. Jak odwołać się do konkretnego skoroszytu i wykonać dowolną metodę?

Sub OdwołanieDoSkoroszytu()

    ' Pełna ścieżka w hierarchii - aktywacja arkusza i zmiana koloru karty

    Workbooks("Przykład.xlsx").Worksheets("Arkusz1").Activate ' Aktywacja arkusza

    Workbooks("Przykład.xlsx").Worksheets("Arkusz1").Tab.Color = vbGreen ' Zmiana koloru karty arkusza na zielony

    ' Skrócona ścieżka - zakładamy, że skoroszyt "Przykład.xlsx" jest już aktywny

    Worksheets("Arkusz1").Activate ' Aktywacja arkusza

    Worksheets("Arkusz1").Tab.Color = vbGreen ' Zmiana koloru karty arkusza na zielony

End Sub

Pełna ścieżka jest bardziej uniwersalna, ponieważ nie wymaga uprzedniego aktywowania skoroszytu.

Skrócona ścieżka jest wygodniejsza i szybsza w zapisaniu, ale działa poprawnie tylko wtedy, gdy skoroszyt „Przykład.xlsx” jest aktywny. W przeciwnym razie wystąpi błąd.

b. Jak zmienić wartość w komórce?

Sub UstawWartoscKomorki()

    ' Pełna ścieżka w hierarchii - ustawienie wartości w komórce

    Workbooks("Przykład.xlsx").Worksheets("Arkusz1").Range("A1").Value = "Witaj!"

    ' Skrócona ścieżka - zakładamy, że arkusz "Arkusz1" jest już aktywny

    Range("A1").Value = "Witaj!"

End Sub

Najkrótsza ścieżka Range(„A1”).Value = „Witaj!” jest najbardziej czytelna i szybka, ale wymaga, aby wcześniej ręcznie lub za pomocą kodu ustawiono właściwy skoroszyt i arkusz jako aktywne.

Korzystanie z takiego rozwiązania częściej powoduje błędy w kodzie takiego typu, że kod się nie zatrzymuje tylko wykonuje czynności nie tam, gdzie byśmy tego chcieli. I jeśli tego nie wyłapiemy zawczasu to skutki mogą być ciężkie do naprawy.

Zupełnie jak zlecenie malowania pokoju w mieszkaniu, gdzie po wszystkim okazuje się, że to nie ten pokój!

c. Jak zaznaczyć zakres komórek?

Sub ZaznaczZakresKomorek()

    ' Pełna ścieżka w hierarchii - zaznaczenie zakresu komórek

    Workbooks("Przykład.xlsx").Worksheets("Arkusz1").Range("A1:B10").Select

    ' Bardziej skrócona ścieżka - zakładamy, że arkusz "Arkusz1" jest już aktywny

    Range("A1:B10").Select

End Sub

Poniżej prezentujemy przykład kodu, który wykorzystuje całą hierarchię, aby wpisać do komórek A1 i B1 dwa wyrazy Hello i World, a na końcu obie komórki pogrubia.

UWAGA! Jest to przykład bardzo nieoptymalny pokazujący całą ścieżkę. Zaraz poniżej będzie zaprezentowane profesjonalne podejście do tych samych czynności operujących na obiektach.

Sub PrzykladNieoptymalny()

   ‘Wprowadzenie wartości i ustawienie właściwości na obiekcie czcionki

    Workbooks("Przykład.xlsx").Worksheets("Arkusz1").Range("A1").Value = "Hello"

    Workbooks("Przykład.xlsx").Worksheets("Arkusz1").Range("B1").Value = "World"

    Workbooks("Przykład.xlsx").Worksheets("Arkusz1").Range("A1:B1").Font.Bold = True

    ' Dodanie nowego arkusza

    Workbooks("Przykład.xlsx").Worksheets.Add.Name = "NowyArkusz"

    Workbooks("Przykład.xlsx").Worksheets("NowyArkusz").Range("A1").Value = "To jest nowy arkusz"

End Sub

Powyższy kod jest trudny do utrzymania i odczytania, ponieważ pełna ścieżka musi być powtarzana przy każdej operacji. Wielokrotne odwoływanie się do tego samego obiektu (np. Workbooks(„Przykład.xlsx”)) spowalnia działanie programu. Brak zmiennych powoduje zwiększenie ryzyka błędów w przypadku konieczności wprowadzenia zmian w nazwach skoroszytu lub arkusza. Na temat zmiennych więcej przeczytasz w naszym blogu tutaj

Sub PrzykladOptymalny()

    ' Ustawienie zmiennych obiektowych

    Dim wb As Workbook

    Dim ws As Worksheet

    ' Przypisanie skoroszytu i arkusza do zmiennych obiektowych za pomocą Set

    Set wb = Workbooks("Przykład.xlsx")

    Set ws = wb.Worksheets("Arkusz1")

    ' Użycie With...End With dla obiektu arkusza

    With ws

        .Range("A1").Value = "Hello" ' Wstawienie wartości

        .Range("B1").Value = "World" ' Wstawienie wartości

        .Range("A1:B1").Font.Bold = True ' Pogrubienie tekstu

    End With

    ' Dodanie nowego arkusza z pełną ścieżką

    wb.Worksheets.Add

    ws.Name = "NowyArkusz"

    ws.Range("A1").Value = "To jest nowy arkusz"

End Sub

Dlaczego powinno się deklarować zmienne i używać konstrukcję With…End With?

  1. Czytelność kodu:
    • Kod z deklaracją zmiennych jest bardziej czytelny, ponieważ nazwy zmiennych (wb, ws) od razu wskazują, z jakimi obiektami się pracuje.
    • Konstrukcja With…End With eliminuje konieczność powtarzania nazwy obiektu przy każdej operacji.
  2. Wydajność:
    • VBA musi za każdym razem „szukać” obiektu w hierarchii, gdy odwołujemy się do niego pełną ścieżką. Przypisanie obiektu do zmiennej obiektowej za pomocą Set sprawia, że odwołanie do obiektu jest szybsze.
  3. Łatwość modyfikacji:
    • W przypadku zmiany nazwy skoroszytu lub arkusza wystarczy zmienić tylko jedno przypisanie w zmiennych, zamiast modyfikować każdą linię kodu.
  4. Przejrzystość błędów:
    • Jeśli wystąpi błąd w przypisaniu obiektu do zmiennej, zostanie on natychmiast wykryty, co ułatwia debugowanie.

Podsumowanie

Model obiektowy w VBA jest narzędziem, które w uporządkowany sposób umożliwia zarządzanie elementami Excela poprzez logiczną hierarchię obiektów, właściwości, metod i zdarzeń. Podobnie jak w bardziej zaawansowanych modelach obiektowych (możesz przeczytać tutaj o programowaniu OPP – object oriented programming) w językach takich jak Java, C++ czy Python, każdy obiekt w VBA jest częścią hierarchii, a jego funkcjonalność można rozszerzać poprzez metody i manipulować za pomocą właściwości. Kluczową cechą modelu VBA jest jego bezpośrednie powiązanie z interfejsem aplikacji Excel, co pozwala na automatyzację działań bez potrzeby tworzenia zaawansowanego kodu.

Hierarchiczna organizacja od ogólnego obiektu Application, przez Workbooks, aż po szczegółowe zakresy Range, zapewnia precyzyjną kontrolę nad różnymi aspektami arkusza, jednocześnie umożliwiając użytkownikowi wybór poziomu szczegółowości. W VBA istnieje również możliwość tworzenia własnych obiektów i właściwości za pomocą modułów klas, co pozwala na modelowanie bardziej złożonych struktur i organizowanie kodu w sposób logiczny i łatwy do utrzymania. Ponadto VBA obsługuje dodatkowe biblioteki obiektów, takie jak te do manipulacji programami Outlook, Word czy PowerPoint, co umożliwia budowanie rozwiązań integrujących wiele aplikacji pakietu Office.

W odróżnieniu od pełnoprawnego programowania obiektowego (OOP), VBA nie umożliwia dziedziczenia czy polimorfizmu, ale oferuje wystarczającą elastyczność do zarządzania strukturami danych i interfejsem użytkownika w kontekście aplikacji Office. Rozumienie różnic między typami obiektów oraz zasad, na jakich się ze sobą komunikują, pozwala na tworzenie kodu, który jest czytelny, wydajny i łatwy do utrzymania. Model obiektowy w VBA wypełnia lukę między funkcjonalnością arkusza kalkulacyjnego a potrzebą automatyzacji i interaktywności, co czyni go istotnym narzędziem w pracy z danymi w środowisku Excel, jak i Windows.

Zobacz również:

Szkolenia:

udostępnij:
Gratulacje!
Wniosek został wysłany prawidłowo.
Dziękujemy za przesłanie zapytania. Skontaktujemy się z Tobą najszybciej jak to możliwe.