Tworzenie modułu klasy w VBA

Stronę tą wyświetlono już: 306 razy

W VBA tworząc moduł klasy tworzy się deklarację samej klasy. Moduł klasy dodaje się poprzez wybranie z menu kontekstowego Insert→Class Module tak jak pokazane zostało to na poniższym rysunku.

Dodawanie modułu klasy w VBA
Rys. 1
Dodawanie modułu klasy w VBA

Nazwa modułu nie może zawierać spacji, nazw specjalnych lub operatorów używanych w VBA. Nazwę w moim przypadku zmieniłem na Car.

Pola klasy

Pola klasy mogą być publiczne public, prywatne private lub statyczne static. Oto przykład deklaracji samych pól klasy:

Listing 1
  1. Private vmark as String
  2. Private vmodel as String
  3. Private vmax_speed as Integer
  4. Private vacceleration as Double
  5. Private vcolor as String

Wszystkie pola prywatne są niedostępne spoza klasy, aby to zmienić konieczne jest użycie modyfikatora dostępu Public.

Konstruktor i destruktor klasy

Konstruktor i destruktor w VBA nie może przyjmować żadnych parametrów. Oto przykład deklaracji konstruktora klasy:

Listing 2
  1. Private Sub Class_Initialize()
  2. vmark = InputBox("Marka samochodu: ")
  3. vmodel = InputBox("Model samochodu: ")
  4. vmax_speed = InputBox("Maksymalna prędkość: ")
  5. vacceleration = InputBox("Przyspieszenie: ")
  6. vcolor = InputBox("Kolor: ")
  7. End Sub

Konstruktor klasy jest uruchamiany automatycznie, gdy obiekt klasy jest tworzony za pomocą Set i new.

Destruktor w VBA wygląda następująco:

Listing 3
  1. Private Sub Class_Terminate()
  2. End Sub

Właściwości klasy

Za pomocą właściwości można kontrolować dostęp do pól klasy, albowiem oto słowo kluczowe Get umożliwia utworzenie makra, które będzie zwracało wartość danego pola klasy lub będzie zwracało wartości wszystkich pól jako tekst:

Listing 4
  1. Public Property Get Description() As String
  2. Description = "Marka: " & vmark & " Model: " & vmodel & " Maksymalna prędkość " & vmax_speed & " Przyspieszenie: " & vacceleration & " Kolor: " & vcolor
  3. End Property

Można też udostępnić możliwość ustawiania danego pola za pomocą słowa kluczowego Let tworzy się bowiem metodę, dzięki której można kontrolować wprowadzane dane:

Listing 5
  1. Public Property Let color(c as String)
  2. vcolor = c
  3. End Property

Gdy utworzony zostanie obiekt klasy Car (tak bowiem nazwa mojego modułu klasy brzmi), wtedy dostęp do pola klasy vcolor będzie wyglądał następująco:

Listing 6
  1. mycar.color = "#ffffff"

Tworzenie obiektu klasy

W zwykłym module po utworzeniu klasy Car w module klasy można stworzyć takie oto makro, pokazujące działanie kodu klasy:

Listing 7
  1. Sub MyCar()
  2. Dim c as Car
  3. Set c = New Car
  4. MsgBox c.Description
  5. End Sub

Metody klasy

Wewnątrz klasy oczywiście można tworzyć prywatne, publiczne i statyczne metody w postaci makr lub funkcji.

Komentarze