[Excel 2003 SP3] Objekte vergleichen

12/07/2009 - 10:03 von Lars P. Wolschner | Report spam
Hallo,

ich habe zwei VBA.Colletion-Objekte, die ich auf Gleichheit testen
möchte. Leider kommt dann zur Laufzeit immer der Fehler, daß der
Parameter nicht optional sei.

Schuld ist wohl die Methode Item, die als Standard voreingestellt ist
und einen Parameter erwartet, in diesem Falle aber gar nicht gemeint
ist.

Wie kann ich zwei derartige Objekte auf Gleichheit testen?

Schon jetzt vielen Dank für Eure Hinweise,
mit freundlichen Grüßen
Lars P. Wolschner
 

Lesen sie die antworten

#1 Andreas Killer
12/07/2009 - 12:07 | Warnen spam
Lars P. Wolschner schrieb:

ich habe zwei VBA.Colletion-Objekte, die ich auf Gleichheit testen
möchte. Leider kommt dann zur Laufzeit immer der Fehler, daß der
Parameter nicht optional sei.

Schuld ist wohl die Methode Item, die als Standard voreingestellt ist
und einen Parameter erwartet, in diesem Falle aber gar nicht gemeint
ist.


Sondern was? Möchtest Du nur Testen ob 2 Objekt-Variablen auf das
gleiche Objekt verweisen?

Function SameObject(O1 As Object, O2 As Object) As Boolean
'True wenn O1 das gleiche Object wie O2 ist
SameObject = O1 Is O2
End Function

Sub Test()
Dim C1 As New Collection, C2 As New Collection
Dim C3 As Collection

C1.Add "asd"
C1.Add "qwe"

C2.Add "qwe"
C2.Add "asd"

Set C3 = C1

Debug.Print SameObject(C1, C3)
End Sub

Wie kann ich zwei derartige Objekte auf Gleichheit testen?


Eine Collection mit einer anderen auf Gleichheit testen kannst Du nur
wenn Du die Elemente beider mit einander einzeln vergleichst. Die
Frage der Vergleichsart hàngt davon ab was in den Collections drin ist.

Andreas.

Function CollectionVergleich(C1 As Collection, C2 As Collection, _
Optional Strikt As Boolean = True) As Boolean
'Vergleicht die Elemente 2er Collections
Dim I As Long, J As Long, Found As Boolean

If C1.Count <> C2.Count Then
'Anzahl Elemente sind nicht gleich
Exit Function
End If

If Strikt Then
'Elemente an gleicher Position vergleichen
For I = 1 To C1.Count
If C1.Item(I) <> C2.Item(I) Then
'Element ist nicht gleich
Exit Function
End If
Next
Else
'Elemente an beliebiger Position vergleichen
For I = 1 To C1.Count
For J = 1 To C2.Count
Found = False
If C1.Item(I) = C2.Item(J) Then
'Element ist gleich
Found = True
Exit For
End If
Next
If Not Found Then
'Element nicht in beiden Collections
Exit Function
End If
Next
End If

'Elemente sind gleich
CollectionVergleich = True
End Function

Sub Test()
Dim C1 As New Collection, C2 As New Collection
Dim C3 As Collection

C1.Add "asd"
C1.Add "qwe"

C2.Add "asd"
C2.Add "qwe"

Set C3 = C1

Debug.Print CollectionVergleich(C1, C3)
End Sub

Ähnliche fragen