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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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:
1 |
Dim gr_Employee As Person |
Zanim zaczniemy używać taką zmienną musimy ją zainicjować, zarezerwować miejsce w pamięci.
1 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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.
Comments 2
pierwszy przykład zawiera znaki: ” ” to raczej nie jest potrzebne
Author
Dziękuję za uwagę. Poprawione.