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:

 

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.

Tworzenie i inicjalizacja Spis treści Atrybuty i właściwości

Comments 2

  1. Właśnie! Bardzo dobrze, że podałeś przykład metody, która może zwrócić wynik (IsOpen). Generalnie metody kojarzą się właśnie z czasownikami i w module klasy tworzy się je głównie przez Sub (czyli jakaś czynność, operacja – ale bez zwrócenia wyniku). Ale co ciekawe, do metody można właśnie przypisać wynik, podobnie jak do właściwości.

    W VBA jak odpytamy okienko Immediate poleceniem „? Arkusz1.Delete” to wyskoczy nam informacja TRUE lub FALSE zależnie od tego czy skasujemy arkusz. Czyli do metody (Delete) VBA potrafi przypisać wynik Boolean. Ale to tylko w okienku, bo np. zadeklarowanie zmiennej lokalnej Boolean i przypisanie do niej instrukcji Arkusz1.Delete zakończy się wyrzuceniem błędu :).

    1. Post
      Author

      Dziękuję za komentarz. Zgodnie z MSDN Worksheet.Delete zwraca Boolean. Taki kod wykonuje się poprawnie :

      MsgBox Worksheets(1).Delete

      Błąd się pojawi dopiero jak będziemy próbowali usunąć ostatni arkusz.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *