Objekte vergleichen ◦ Zusammenfassung ◦ ?

Da Objektvaiablen nicht Objekte sondern Verweise auf Objekte speichern, ist Vorsicht geboten. Die im Thema Objekte zuweisen beschriebenen Probleme tauchen auch beim Vergleich von Objektvariablen auf.

Seien Zelle1 und Zelle2 zwei Objektvariablen, die auf verschiedene Zellen eines Tabellenblattes zeigen. Die Entscheidungsanweisung

    If Zelle1 = Zelle2 Then ...

vergleicht nicht, ob die beiden Variablen auf dasselbe Objekt verweisen, sondern, ob die Value-Eigenschaften (Standardeigenschaft des Range-Objekts) der beiden Objekte denselben Wert besitzen. Objektvariablen müssen deshalb immer mit dem Is-Operator verglichen werden. Der Vergleich muss also wie folgt lauten:

    If Zelle1 Is Zelle2 Then ...

Da aber der Is-Operator zwei Objektverweise vergleicht und nicht zwei Objekte, scheitert die Entscheidungsanweisung selbst dann, wenn eine Variable auf eine exakte Kopie des Objektes der anderen verweist. Um Missverständnisse zu vermeiden, spricht man deshalb von einem identischen Objekt, wenn man wirklich ein und dasselbe Objekt meint, und von einem gleichen Objekt, wenn von einer exakten Kopie die Rede ist. In diesem Sinne prüft der Is-Operator also die Identität und nicht die Gleichheit von Objekten.

Von besonderer Bedeutung ist die Zuweisung von bzw. der Vergleich mit Nothing. Die Themen "Instanzen erstellen" und "Instanzen löschen" werden näher darauf eingehen. An dieser Stelle sei lediglich darauf hingewiesen, dass die beiden folgenden Zeilen gültige Anweisung sind:

    Set Zelle1 = Nothing           'Zuweisung von Nothing

    If Zelle1 Is Nothing Then      'Vergleich mit Nothing

Die Arbeit mit Verweisen ist oft nicht intuitiv. Die Vorstellung, dass eine Objektvariable ein Objekt enthält ist meist einfacher. Wo sie ausreicht, werden die folgenden Themen deshalb auch oft in dieser Vorstellung argumentieren. Implizit verbirgt sich dahinter aber immer die Arbeit mit Objektverweisen.

Zwischenresultate II
Vertausche

©abo