Einfaches Beispiel für ein Klassenmodul
Es handelt sich um ein einfaches Beispiel für ein Klassenmodul, dass verschiedene Arten von Eigenschaften und Methoden darstellen soll.
Beschreibung des Klassenmoduls:
Es können Werte für einen Raum einer Wohnung / Haus festgelegt werden. Zu diesen Werten gehören Breite, Länge, Höhe, Name und Farbe des Raumes. Wenn diese Werte festgelegt sind, kann man Berechnungen über Wandgröße und Raumgröße durchführen lassen. Somit kann z.B. der Farbbedarf eines Raumes ermittelt werden.
Besonderheiten des Klassenmoduls:
Es gibt verscheidene Eigenschaften. Breite, Länge, Höhe, Name und Farbe des Raumes sind sowohl schreibbar wie lesbar. Die Eigenschaft Raumeinheit ist nur schreibbar aber nicht lesbar. Die Eigenschaft Einheit ist schreibgeschützt und somit nur lesbar.
Die Methode Zimmergroesse ist ohne Parameter aufzurufen. Die Methode Wandgroesse ist mit einer Festlegung der Wand bzw. des Fußßbodens (Raumgröße) aufrufbar. Der Parameter muss angegeben werden.
Es werden beim Initialisieren des Klassenmoduls Standardwerte gesetzt.
Die Ausgabe erfolgt bereits formatiert.
Die Module des Klassenmoduls:
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
Option Explicit
'alle Deklarationen des Klassenmoduls
Private MyFarbe As String
Private MyRaum As String
Private MyLaenge As Currency
Private MyBreite As Currency
Private MyHoehe As Currency
Private MyEinheit As String
Public Enum vEinheit
cm = 1
m = 2
mm = 0
End Enum
Public Enum vWand
kurz = 0
lang = 1
Boden = 2
End Enum
'alles Eigenschaften
Public Property Let RaumEinheit(ByVal MyEinheiten As vEinheit)
MyEinheit = fktMyEinheit(MyEinheiten)
End Property
Public Property Get Einheit() As String
Einheit = MyEinheit
End Property
Public Property Get RaumFarbe() As String
RaumFarbe = MyFarbe
End Property
Public Property Let RaumFarbe(ByVal MeineFarbe As String)
MyFarbe = MeineFarbe
End Property
Property Get RaumName() As String
RaumName = MyRaum
End Property
Property Let RaumName(ByVal Zimmer As String)
MyRaum = Zimmer
End Property
Property Get RaumLaenge() As Currency
RaumLaenge = MyLaenge
End Property
Property Let RaumLaenge(ByVal Zimmerlaenge As Currency)
MyLaenge = Zimmerlaenge
End Property
Property Get RaumHoehe() As Currency
RaumHoehe = MyHoehe
End Property
Property Let RaumHoehe(ByVal Zimmerhoehe As Currency)
MyHoehe = Zimmerhoehe
End Property
Property Get RaumBreite() As Currency
RaumBreite = MyBreite
End Property
Property Let RaumBreite(ByVal Zimmerbreite As Currency)
MyBreite = Zimmerbreite
End Property
'Methoden für alle sichtbar
Public Function Zimmergroesse() As String
Dim strGroesse As Currency
strGroesse = MyLaenge * MyBreite
Zimmergroesse = Format(strGroesse, "#,##0.00") & " quadrat" & MyEinheit
End Function
Public Function Wandgroesse(ByVal Wand As vWand) As String
Dim strGroesse As Currency
Dim strLaenge As Currency
Dim strkurz As Currency
Dim strlang As Currency
Dim strBreite As Currency
Dim strText As String
'kurze Wand ermitteln
strBreite = MyHoehe
If MyLaenge < MyBreite Then
strkurz = MyLaenge
strlang = MyBreite
Else
strkurz = MyBreite
strlang = MyLaenge
End If
'Wand ermitteln
Select Case Wand
Case 0 'kurze Wand
strLaenge = strkurz
strText = "Kurze Wand: "
Case 1 'lange Wand
strLaenge = strlang
strText = "Lange Wand: "
Case 2
strLaenge = strkurz
strBreite = strlang
strText = "Fußboden: "
End Select
strGroesse = strLaenge * strBreite
Wandgroesse = strText & Format(strGroesse, "#,##0.00") & " quadrat" & MyEinheit
End Function
Private Function fktMyEinheit(ByVal MeineEinheit As vEinheit) As String
Select Case MeineEinheit
Case 2
fktMyEinheit = "meter"
Case 0
fktMyEinheit = "millimeter"
Case 1
fktMyEinheit = "centimeter"
End Select
End Function
Private Sub Class_Initialize()
'hier werden Standardwerte geladen
'wenn das Klassenmodul initialisiert wird
MyBreite = 1
MyLaenge = 1
MyHoehe = 1
MyFarbe = "rot"
MyRaum = "Flur"
MyEinheit = "meter"
End Sub
Private Sub Class_Terminate()
'hier sollten Objekte entladen werden
'in diesem Beispiel sind keine Objekte vorhanden
End Sub
In den Zeile 1 bis 21 sind alle notwendigen Variablen deklariert. Es sind nur die Deklarationen der Enum Werte auf öffentlich gesetzt und daher auch außerhalb des Klassenmoduls verfügbar. Die Enum-Werte sind vordefinierte Werte für einen Variablentyp. Wenn Sie die Variablen diesen Typ zuweisen (wie in Zeile 24), können Sie die hier deklarierten Werte als Inhalte der Variablen (oder Funktionen) verarbeiten.
In Zeile 24 bis 26 wird die Eigenschaft RaumEinheit deklariert. Dies Eigenschaftz ist nicht lesbar, da keine Property Get Anweisung zu dieser Funktion exisitert.
In Zeile 28 bis 30 ist die schreibgeschützte Eigenschaft Einheit deklariert. Hier fehlt die Deklaration mit Property Let oder Property Set. So wird der Schreibschutz hergestellt.
Alle weiteren Eigenschaften werden von Zeile 32 bis Zeile71 deklariert. Hier gibt es sowohl eine Funktion Property Get wir eine Property Let Anweisung. Daher kann die Eigenschaft gelesen und neu gesetzt werden.
In Zeile 75 bis 83 wird die Methode Zimmergroesse als Funktion beschrieben. Die Funktion muss als Public deklariert werden, damit sie später auch verarbeitet werden kann. In dieser Funktion werden die gesetzten Parameter verarbeitet.
In Zeile 85 bis 122 ist die Funktion Wandgroesse beschrieben. Diese Funktion ist ähnlich wie Zimmergroesse. Nur es wird hier ein Parameter übergeben, der bestimmt, welcher Wert berechnet werden soll. Das würde praktisch natürlich die vorherige Funktion Zimmergroesse überflüssig machen.
Dieser Code wird in ein Klassenmodul kopiert und clsWohnung benannt. Sie können natürlich auch einen anderen Namen verwenden, dann müssen Sie bei den Deklarationen den Namen entsprechend ändern.
Das Klassenmodul wird wie folgt in ein Modul eingesetzt:
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
Option Explicit
Private objWohnung As clsWohnung
Sub MeineWohnung()
Set objWohnung = New clsWohnung
With objWohnung
.RaumName = "Schlafzimmer"
.RaumBreite = 4.93
.RaumLaenge = 3.51
.RaumHoehe = 2.5
.RaumFarbe = "Blau"
.RaumEinheit = m
MsgBox .Zimmergroesse
MsgBox .Wandgroesse(Boden)
MsgBox .Wandgroesse(kurz)
MsgBox .Wandgroesse(lang)
MsgBox .Einheit
End With
End Sub
In Zeile 3 wird der Objektvariablen das neue Klassenmodul als Typ zugewiesen. In der Zeile 7 wird die neue Klasse initialisiert. Samit stehen erst in der Objektvariablen alle Methoden und Eigenschaften zur Verfügung.
In den Zeilen 10 bis 15 werden die Werte zugewiesen. Es gibt in Zeile 15 eine Besonderheit. Diese Eigenschaft hat vordefinierte Werte. Diese werden als Quicktip im Code bereits angeboten.
In den Zeilen 16 bis 19 werden die Berechnungen durch geführt und entsprechend am Bildschirm angezeigt. In Zeile 21 wird nochmal die schreibgeschützte Eigenschaft ausgegeben. Diese hängt von der Eigenschaft RaumEinheit ab und setzt den dort ausgewählten Wert um.
Interessante Links
Für weitere Infos bitte auf den Text klicken
Cookies speichern Informationen lokal auf Ihrem Rechner, ohne die Verwendung kann der Funktionsumfang beeinträchtigt werden. Weitere Informationen
Annehmen