Eigenschaften

Häufig haben Objekte bestimmte Eigenschaften. Eine Eigenschaft kann man sich als eine Art Variable irgendeines Datentyps vorstellen. IntelliSense zeigt Eigenschaften mit dem EigenschaftenEigenschaften-Symbol.

Eine Eigenschaft eines Autos dürfte die Geschwindigkeit sein. Die Geschwindigkeit ermitteln wir wohl mit: Debug.Print meinAuto.Geschwindigkeit und erhalten eine Zahl zurück. Manche Eigenschaften kann man einfach ändern, indem man ihnen einen neuen Wert zuweist, andere sind schreibgeschützt. Wir gehen davon aus, dass man die Geschwindigkeit wirklich einfach wie folgt ändern können soll: meinAuto.Geschwindigkeit = 120

Definiert man im Deklarationsbereich eines Klassenmoduls öffentliche Variablen, sind dies Eigenschaften der Klasse. Mit Property-Prozeduren gibt es aber eine elegantere und vorteilhaftere Art und Weise, Eigenschaften zu schreiben. Die Vorteile von Property-Prozeduren sind so bestechend, dass VBA Property nicht auf Klassen beschränkt, sondern es ist empfehlenswert, damit auch im Deklarationsbereich von Standardmodulen öffentlich deklarierte Variablen zu ersetzen. Die Property-Prozeduren bekommen dafür einfach den Namen, den die entsprechenden Variablen bisher hatten.

Meistens spielen zwei Property-Prozeduren für je eine Eigenschaft zusammen: Property Let weist einer Eigenschaft einen Wert zu, Property Get gibt den Wert wieder aus. Fehlt Property Let, ist die Eigenschaft schreibgeschützt, fehlt Property Get, kann man den Wert der Eigenschaft nicht auslesen. Ein weiterer Vorteil von Property besteht darin, dass der Wert besser gekapselt ist.

Wir schreiben nun gleich drei neue Eigenschaften: strFarbe speichert in einer öffentlichen Variable die Farbe des Autos, Geschwindigkeit die aktuelle Geschwindigkeit. Der Motor soll aber bei 250 abriegeln, ein höherer Wert ist nicht möglich. Wird das versucht, wird Geschwindigkeit auf 250 reduziert und die schreibgeschützte Eigenschaft abgeriegelt springt von False auf True.

Auto
Option Explicit
Public strFarbe As String
Private bytTempo As Byte
Private blnTempoSperre As Boolean

Public Property Let
Geschwindigkeit(Speed As Long) If (Speed > 250) Then bytTempo = 250 blnTempoSperre = True Else bytTempo = Speed blnTempoSperre = False End If End Property
Public Property Get
Geschwindigkeit() As Long Geschwindigkeit = bytTempo End Property
Public Property Get
abgeriegelt() As Boolean abgeriegelt = blnTempoSperre End Property

Das folgende Standardmodul nutzt die Klasse:

Modul1
Public Sub Autos()
Dim Familienkutsche As New Auto

Familienkutsche.strFarbe = "Blau"
Familienkutsche.Geschwindigkeit = 320
Debug.Print Familienkutsche.Geschwindigkeit
Debug.Print Familienkutsche.abgeriegelt
End Sub


Die Eigenschaftswerte werden im Deklarationsbereich der Klasse gespeichert. In unserem Beispiel können wir übrigens unser Auto nach Belieben umfärben, weil strFarbe mit Public deklariert wurde. Das ist hier sicherlich nicht sehr sinnvoll, es sind aber auch Fälle denkbar, in denen das anders ist. Die anderen beiden Werte sind Private und somit nicht direkt von außerhalb zu zugänglich. Der Zugriff darauf geschieht über die Property-Prozeduren. Property Let Geschwindigkeit legt gleich für beide Eigenschaften den aktuellen Wert fest, die jeweiligen Property Get-Prozeduren geben die Werte wieder zurück.

Interessanterweise wird die Geschwindigkeit als Long übergeben, aber in einer Byte-Variablen gespeichert. Zugleich überwacht der Code, dass kein Wert größer als 250 gespeichert werden kann.

Außer Property Get und Property Let gibt es noch Property Set. Property Set funktioniert im Prinzip genau wie Property Let, ist allerdings für die Übergabe von Objektvariablen gedacht.