Kurs VBA – Klasy – Tworzenie i inicjalizacja

W tej części kursu zobaczymy jak tworzyć i używać klasy. Nie będę się wdawał w szczegóły, które poznacie w kolejnych postach. Chciałbym abyście byli przygotowani do (technicznie) swobodnego tworzenia i używania klas, aby stosować elementy przedstawione później.

Stworzymy klasę, które będzie przechowywać oraz wypisywać do arkusza dane pracownika.

 

Definicja klasy

Każda klasa mieści się w osobnym module w pliku Excel. Moduł klasy tworzymy podobnie jak zwykłe moduły z kodem. Klikam prawym przyciskiem na dowolnej pozycji w oknie projektu i wybieram Insert / Class Module.

Jak widać dodał się nowy katalog z nowym modułem. Cały kod zawarty w tym nowym module będzie dotyczył jednej klasy.

Kiedy moduł jest zaznaczony w drzewie projektu, możemy zmienić nazwę klasy w oknie Properties.

W oknie kodu umieśćmy poniższe instrukcje:

Option Explicit

Public Name As String
Public Surname As String
Private pAge As String

Public Property Get Age() As String
 Age = pAge
End Property

Public Property Let Age(value As String)
 If value < 0 Then
  pAge = 0
 Else
  pAge = value
 End If
End Property

Sub writeData(ir_TargetRange As Range)
 ir_TargetRange = Name
 ir_TargetRange.Offset(0, 1) = Surname
 ir_TargetRange.Offset(0, 2) = Age
End Sub

Klasa zawiera trzy atrybuty.

  • Imię
  • Nazwisko
  • Wiek
Zawiera też dwie specjalne metody do zapisu i odczytu wieku oraz najważniejszą metodę do wypisywania danych we wskazanym miejscu arkusza. Jak widać atrybuty definiuje się jak każdą inną zmienną do tej pory. Definicja metody wygląda jak definicja zwykłej procedury.

Inicjalizacja obiektu

Oczywiście powyższa definicja to dopiero schemat, który nic nie robi. Atrybuty nie mają zarezerwowanego miejsca w pamięci. Musimy więc stworzyć zwykły moduł z kodem i wkleić tam poniższy przykład:

Option Explicit

Dim gr_Employee As Person

Sub test()
    Set gr_Employee = New Person
    
    gr_Employee.Name = "Jan"
    gr_Employee.Surname = "Kowalski"
    gr_Employee.Age = 34
    
    gr_Employee.writeData Range("A1")
    
End Sub

Co widzimy powyżej? Po pierwsze definicja zmiennej referencyjnej typu naszej nowej klasy:

Dim gr_Employee As Person

Zanim zaczniemy używać taką zmienną musimy ją zainicjować, zarezerwować miejsce w pamięci.

Set gr_Employee = New Person

Od teraz gr_Employee wskazuje na nowy obiekt typu Person.

Jeżeli będziemy wpisywać powyższy kod ręcznie to widać, że możemy już korzystać z usług auto uzupełniania.

Po uruchomieniu procedury Test w zaznaczonym arkuszu pojawią się poniższe wartości:

Użycie w kolekcji

Worksheets jest kolekcją obiektów typu Worksheet. Możemy też stworzyć kolekcję naszych obiektów typu Person.

Option Explicit

Dim gref_Employee As Person
Dim gcol_Employees As Collection
Dim i As Integer

Sub test()
    Set gref_Employee = New Person
    Set gcol_Employees = New Collection
    i = 0
        
    gref_Employee.Name = "Jan"
    gref_Employee.Surname = "Kowalski"
    gref_Employee.Age = 34
    gcol_Employees.Add gref_Employee
    
    Set gref_Employee = New Person
    gref_Employee.Name = "Krzysztof"
    gref_Employee.Surname = "Nowak"
    gref_Employee.Age = 36
    gcol_Employees.Add gref_Employee
    
    Set gref_Employee = New Person
    gref_Employee.Name = "Anna"
    gref_Employee.Surname = "Iksińska"
    gref_Employee.Age = 32
    gcol_Employees.Add gref_Employee
    
    For Each gref_Employee In gcol_Employees
        gref_Employee.writeData Range("A1").Offset(i, 0)
        i = i + 1
    Next gref_Employee
    
End Sub

Podsumowując zawarliśmy w jednym odrębnej całości pewne cechy oraz działania modelowanego bytu.

W kolejnych częściach kursu przedstawię różne aspekty używania atrybutów i klas.

Wstęp i teoria Spis treści Metody

Comments 2

    1. Post
      Author

Skomentuj zlyPasażer Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany.