GRUNDLAGEN

Refactoring: Code optimieren - Teil 3

Array durch Objekt ersetzen

Arrays verwendet man in VBA meist, um mehrere gleichartige Daten zusammenzufassen und einfach über den Index darauf zugreifen zu können.

Möglicherweise kommt ein Array aber auch zum Einsatz, um verschiedenartige Informationen aufzunehmen, die lediglich den gleichen Datentyp aufweisen. Der Zugriff auf diese Informationen kann allerdings nur über den Index des Arrays erfolgen und ist daher nicht besonders intuitiv zu programmieren. Das Beispiel aus Listing 3 zeigt, dass man Hinweise auf den Inhalt etwa in Kommentaren unterbringen kann.

Public Sub ArrayBeispiel()
Dim strParameter(2) As String
strParameter(0) = "12" 'BenutzerID
strParameter(1) = "Minhorst" 'Benutzername
strParameter(2) = "axvkes" 'Kennwort
End Sub

Für einen solchen Fall bietet sich die Verwendung einer Klasse an, die alle in dem Array gespeicherten Informationen als Eigenschaften enthält. Wie dies aussieht, zeigt Listing 4. Der Code, um mit dieser Klasse zu arbeiten, scheint zwar etwas aufwendiger, aber die Verständlichkeit ist ungleich besser.

Private mBenutzernummer As String
Private mBenutzername As String
Private mKennwort As String
Public Property Let Benutzernummer(strBenutzernummer As String)
mBenutzernummer = strBenutzernummer
End Property
Public Property Get Benutzernummer() As String
Benutzernummer = mBenutzernummer
End Property
Public Property Let Benutzername(strBenutzername As String)
mBenutzername = strBenutzername
End Property
Public Property Get Benutzername() As String
Benutzername = mBenutzername
End Property
Public Property Let Kennwort(strKennwort As String)
mKennwort = strKennwort
End Property
Public Property Get Kennwort() As String
Kennwort = mKennwort
End Property

Listing 5 schließlich zeigt, wie die Klasse statt des Arrays mit den gewünschten Daten gefüllt wird. Die Klasse kann anschließend genau wie ein Array als Parameter einer Routine weitergegeben werden.

Public Sub EigenschaftenklasseBeispiel()
Dim objBenutzerdaten As clsBenutzerdaten
Set objBenutzerdaten = New clsBenutzerdaten
With objBenutzerdaten
.Benutzernummer = "12"
.Benutzername = "Minhorst"
.Kennwort = "axvkes"
End With
Call BenutzerdatenVerarbeiten(objBenutzerdaten)
End Sub