Ich habe folgende Klassenbibliothek zum Testen
Class TestArray
Private vValues As Variant
Property Get Values As Variant
Me.Values = Me.vValues
End Property
Property Set Values As Variant
Me.vValues = Me.Values
End Property
Function GetValues As Variant
Me.GetValues = Me.vValues
End Function
End Class
und dazu folgenden Testagenten
Sub Initialize
Dim ob As New TestArray
Dim v As Variant
Dim v0(1) As Variant
Dim s0(1) As String
v0(0) = "v0"
v0(1) = "v1"
s0(0) = "s0"
s0(1) = "s1"
ob.Values = s0
'Test 1 - Fehler
ForAll e1 In ob.Values
MsgBox DataType(e1),,"Test 1" 'Fehlerhafte Datentyp-Werte z. B. 191, 10800 oder auch 0
End ForAll
'Test 2 - OK
v = ob.Values
ForAll e2 In v
MsgBox DataType(e2),,"Test 2 'Datentyp 8 ok
End ForAll
'Test 3 - OK
ForAll e3 In ob.GetValues
MsgBox DataType(e3),,"Test 3 'Datentyp 8 ok
End ForAll
End Sub
Die Properties erwarten als Typ Variant. Wenn ich ein Feld vom Typ String übergebe und über die Property Get in einer ForAll-Schleife die Werte abrufen will, bekomme ich einen Fehler wegen falschem Datentyp.
Ich habe deshalb über DataType den Datentyp ausgegeben und bekomme je nach Speicherkonstellation die unterschiedlichsten Werte wie oben im Kommentar angegeben. Richtig wäre ja der Wert 8 für String.
Dies ist ein stark abgerüsteter Test. In der eigentlichen Anwendung wird je nach Speicherkonstellation oft leer für den Wert ausgegeben oder Lotus Notes stürzt ab.
Wenn ich wie im 'Test 2' vorher den Wert der Property Get einer Variant-Variablen zuweise oder wie im 'Test 3' eine Funktion verwende ist alles richtig. Auch wenn ich statt eines String-Feldes ein Variant-Feld benutze laufen alle 3 Tests richtig.
Was ist die Ursache dafür, dass die Properties Get/Set den Typ Variant nicht richtig behandeln?