Strony

  • Strona główna
  • Kurs Excel
  • Kurs VBA
  • Moje narzędzia
  • Ciekawe Strony

Kurs VBA - Klasy - Metody


Metody są różnymi działaniami, które może wykonywać modelowana przez naszą klasę
rzecz. Modelując samochód możemy dać mu metody:
  • hamuj
  • przyspieszaj
  • włącz światła
  • wyłącz swiątła
  • otwórz bagażnik
  • itd.
Oczywiście w praktyce nie będziemy modelować samochodu. Bardziej praktyczna klasa może służyć do zapisywania danych do pliku. Metody w takiej klasie mogą wyglądać tak:

Option Explicit


Public Sub OpenFile(istr_FileName As String, Optional istr_FilePath As String = "")

...

End Sub

Public Sub WriteRange(iref_SavedRange As Range)
    
...

End Sub

Public Function IsOpen() As Boolean

...

End Function

Private Sub Close()

...

End Sub

Private Sub SaveAndClose()

...

End Sub

Mamy powyżej funkcje otwierającą plik, zapisującą do niego itd. W tym modelu jeden obiekt to jeden plik. Jeżeli chcemy otworzyć nowy plik, musimy zainicjować nowy obiekt naszej klasy. Możemy stworzyć kolekcję plików itd.

Jak widać metody definiuje się tak samo jak procedury i funkcje w tradycyjnym module. Metody oznaczone jako Private mogą być wywoływane tylko przez inne metody danej klasy.

Publiczne czy prywatne?

Decyzja jakie metody zdefiniować jako prywatne, a które jako publiczne, jest kluczowa przy tworzeniu klasy.

Z reguły chcemy, żeby metod publicznych było jak najmniej. W poprzednim poście pisałem, że programowanie obiektowe przypomina budowanie z klocków. Metody publiczne, są to części, które "wpasowują się" w inne moduły. Wyżej przedstawiona klasa służy do zapisywania do pliku. Ma ona publiczną metodę SaveAndClose, która zapisuje i zamyka plik. Umożliwiamy w ten sposób innym modułom zamknięcie edytowanego pliku.

Parę miesięcy później postanawiamy wprowadzić zmianę w sposobie zapisywania pliku. Chcemy, żeby zapisywał się w jednej określonej lokalizacji. Jeżeli teraz wprowadzę zmiany w środku metody Save to inne moduły zostają nietknięte i wciąż będą bez problemu działać.

Za kolejne parę miesięcy, chcę dodać specjalny formularz przed zamknięciem arkusza. Tworzę więc taki formularz i uruchamiam go przed metodą Close. Jak poprzednio, inne moduły nie zmieniają się, po prostu uruchamiają metodę SaveAndClose, nie martwiąc się co jest w środku.

Popatrzmy na ten przykład z drugiej strony. Funkcja IsOpen sprawdza czy plik jest już otwarty. Może być użyta w procedurze WriteRange, przed zapisem do pliku. Ponieważ jest publiczna, inne moduły też mogą sprawdzać czy plik jest otwarty. Procedure Close jest natomiast prywatna. Chcemy, aby plik był zawsze zamykany publiczną procedurą SaveAndClose.

W kolejnej części kursu przejdę do bardziej rozbudowanego tematu, czyli atrybutów.