GWARANTOWANE TERMINY
Jesteś tutaj: strona głównastrefa wiedzyKlasy w języku VBA
MENU

Klasy w języku VBA


Kategoria: Kurs VBA, Kurs Excel, Samouczek Excel
16Jan

Klasy w języku  VBA wywodzą się z programowania Object Orienred Programming, czyli tzw. Programowania zorientowanego obiektywnie. Pisanie programów sprowadza się więc do tworzenia za pomocą klas obiektów na których, lub za pomocą których wykonujemy Operacje. Wydaje się skomplikowane?  Polecamy artykuł Grzegorza Plaka – eksperta Cognity, który przybliży Wam język VBA. 

Na początek za nim zaczniemy mówić o klasach w VBA proszę sobie wyobrazić psa – Reksa czy Ciapka Każdy z tych psów ma charakterystyczne właściwości np. kolor skóry, kolor oczu, łapy, ogon itd. Prawie każdy pies potrafi również szczekać, biegać, skakać. 

Nasze psy będą przykładowym zjawiskiem, które pomoże zrozumieć klasy w języku VBA i wyjaśnić ich działanie. 

Tak więc jeśli zdefiniujemy w aplikacji klasę Pies, to możemy określić pewne właściwości oraz operacje, które poszczególne psy będą mogły wykonywać (metody). 

Uwaga! Klasa jest definicją.

Jeśli będziemy chcieli wykorzystać naszą klasę, to musimy utworzyć obiekt, który ma dokładnie te same właściwości oraz metody co klasa pies. Dlaczego to jest takie ważne? Bo jeśli użytkownik będzie chciał utworzyć dziesięć psów, to musi dziesięć razy powtórzyć jego właściwości oraz metody w programowaniu proceduralnym, natomiast w programowaniu obiektowym wystarczy, że zrobi to jeden raz i będzie korzystał z klasy aby tworzyć obiekty.

Poniżej zostanie przedstawiony przykład, w którym zostaną utworzone trzy psy z wykorzystaniem programowania strukturalnego oraz obiektowego.

Tworzenie klasy w VBA

Aby utworzyć klasę Pies, należy przejść do edytora VBA, kliknąć PPM na projekt (jeśli go nie widać, to proszę użyć Ctrl + R) a następnie wybrać Insert -> Class Module (rys. 1)

rys 1

Rys. 1. Wstawianie klasy

 

Proszę aktywować klasę, a następnie z okna właściwości (jeśli go nie ma, to proszę kliknąć F4) zmienić właściwość Name na Pies (rys. 2).

rys 2

Rys. 2. Zmiana nazwy klasy

 

W oknie kodu będziemy tworzyć właściwości oraz metody klasy Pies. Załóżmy, że chcemy mieć następujące właściwości:

  • Wiek
  • Nazwa
  • Kolor oczu

 

oraz metody:

  • Szczekaj

 

Prawie każda zmienna (zgodnie z ideą programowania obiektowego) powinna być prywatna, tzn. niewidoczna na zewnątrz klasy. Dlatego zadeklarujemy zmienne klasy Pies:

Private pWiek As Integer

Private pNazwa As String

Private pKolorOczu As String

W związku z tym, że nie jest możliwe edytowanie tych zmiennych z zewnątrz klasy, to należy utworzyć właściwości, które umożliwią ich odczyt i edycję:

Właściwość, która pozwoli nam na odczyt zmiennej pWiek wygląda następująco:

Public Property Get Wiek() As Integer

    Wiek = pWiek

End Property

Właściwość która pozwoli nam na zapis do zmiennej pWiek wygląda następująco:

Public Property Let Wiek(w As Integer)

    pWiek = w

End Property

Podobnie należy zdefiniować właściwości dla pozostałych zmiennych

Public Property Get Nazwa() As String

    Nazwa = pNazwa

End Property

Public Property Let Nazwa(w As String)

    pNazwa = w

End Property

Public Property Get KolorOczu() As String

    KolorOczu = pKolorOczu

End Property

Public Property Let KolorOczu(w As String)

    pKolorOczu = w

End Property

Wstawienie metody umożliwiającej wykonanie operacji to wstawienie procedury lub funkcji

W tym przypadku będzie to procedura o nazwie Szczekaj, która będzie wyświetlać okno dialogowe z odpowiednim komunikatem:

Public Sub Szczekaj()

    MsgBox "Hau. Hau."

End Sub

Wykorzystanie klasy w makrze

Po zdefiniowaniu klasy Pies można przystąpić do wykorzystania klasy Pies.

W tym celu przechodzimy do utworzenia nowego modułu (PPM na projekcie a następnie Insert -> Module p. rys. 3).

rys 3

Rys. 3. Tworzenie nowego modułu

 

W module tworzymy procedurę test1, w której będziemy przechowywać kod odpowiedzialny za wykorzystanie klasy Pies:

Sub test1()

Dim reks As New Pies

Dim ciapek As New Pies

Dim azor As New Pies

    reks.Wiek = 11

    reks.Nazwa = "Reks"

    reks.KolorOczu = "zielone"

    ciapek.Wiek = 4

    ciapek.Nazwa = "Ciapek"

    ciapek.KolorOczu = "niebieskie"

    azor.Wiek = 2

    azor.Nazwa = "Azor"

    azor.KolorOczu = "brązowe"

    MsgBox reks.Nazwa + " ma " + reks.Wiek + " lat oraz ma " + reks.KolorOczu + " oczy"

    reks.Szczekaj

    MsgBox ciapek.Nazwa + " ma " + ciapek.Wiek + " lat oraz ma " + ciapek.KolorOczu + " oczy"

    ciapek.Szczekaj

    MsgBox azor.Nazwa + " ma " + azor.Wiek + " lat oraz ma " + azor.KolorOczu + " oczy"

    azor.Szczekaj

End Sub

Ten sam kod z tą różnicą, że napisany z wykorzystaniem programowania proceduralnego:

Sub test2()

Dim reks_wiek As Integer

Dim reks_nazwa As String

Dim reks_kolor_oczu  As String

Dim ciapek_wiek As Integer

Dim ciapek_nazwa As String

Dim ciapek_kolor_oczu As String

Dim azor_wiek As Integer

Dim azor_nazwa As String

Dim azor_kolor_oczu As String

    reks_wiek = 11

    reks_nazwa = "Reks"

    reks_kolor_oczu = "zielone"

    ciapek_wiek = 4

    ciapek_nazwa = "Ciapek"

    ciapek_kolor_oczu = "niebieskie"

    azor_wiek = 2

    azor_nazwa = "Azor"

    azor_kolor_oczu = "brązowe"

    MsgBox reks_nazwa + " ma " + reks_wiek + " lat oraz ma " + reks_kolor_oczu + " oczy"

    MsgBox "Hau. Hau."

    MsgBox ciapek_nazwa + " ma " + ciapek_wiek + " lat oraz ma " + ciapek_kolor_oczu + " oczy"

    MsgBox "Hau. Hau."

    MsgBox azor_nazwa + " ma " + azor_wiek + " lat oraz ma " + azor_kolor_oczu + " oczy"

    MsgBox "Hau. Hau."

End Sub

Widać wyraźnie, że w przypadku programowania obiektowego kod w procedurze ma mniej linijek. W przypadku, gdy obsługuje się znacznie więcej danych tego samego typu najlepiej jest używać technik obiektowych. Co więcej, edycja kodu napisanego „obiektowo” jest mniej czasochłonna niż w przypadku kodu strukturalnego.

 

Autorem tekstu i obrazków jest Grzegorz Plak - trener Cognity.

 

Licencja Creative Commons
Klasy w języku VBA by Cognity is licensed under a Creative Commons Uznanie autorstwa-Użycie niekomercyjne 4.0 Międzynarodowe License.

Wybrani Klienci:

Ten serwis używa plików cookies. Brak zmiany ustawień przeglądarki oznacza zgodę na ich używanie.
Więcej informacji o plikach cookies znajdziesz tutaj
Kliknij ZGADZAM SIĘ, aby ta informacja nie wyświetlała się ponownie
Cognity.pl