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.