Spezielle Objektvariablen in VBA (Spezielle Objektvariablen in VBA), Lektion, Seite 723841
https://www.purl.org/stefan_ram/pub/spezielle_objektvariablen_vba (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
VBA-Kurs

Spezielle Objektvariablen in VBA

Wir nennen einen Typ einen Objekttyp, wenn der Aufruf »VBA.Information.IsObject( v )« den Wert »"Object"« hat, falls die Variable »v« mit jenem Typ deklariert wurde.

Eine allgemeine Objektvariable  wird mit dem Typ »Object« angelegt, eine spezielle Objektvariable  wird mit einem anderen Objekttyp angelegt.

Wir nennen Objekttypen außer »Nothing« und »Object« Klassen.

Ein Objekt, dessen Typ eine Klasse ist, nennt man auch ein Exemplar  jener Klasse.

Der Typ eines Objekts ist der Regel eine Klasse. Die Klasse eines Objekts legt die Fähigkeiten eines Objektes fest, also welche Einträge (Eigenschaften und Prozeduren) es hat und wie diese verwendet werden können. »Nothing« hat den Typ »Nothing« und damit keine Einträge.

Beispielsweise ist »VBA.ErrObject« die Klasse (der Typ) von »VBA.Err« (laut »VBA.Information.TypeName«).

Prozeduren in Klassen werden auch Methoden  genannt.

In dem folgenden Programmbeispiel wird eine spezielle Objektvariable mit dem Typ »VBA.ErrObject« angelegt. Eine solche Variable kann nur an »Nothing« oder an ein Objekt vom Typ »VBA.ErrObject« gebunden werden.

Modul1

Option Explicit

Sub Main()

Dim E As VBA.ErrObject

Debug.Print VBA.Information.VarType( E )
Debug.Print VBA.VbVarType.vbObject
Debug.Print

Debug.Print VBA.Information.TypeName( E )
Debug.Print VBA.Information.IsObject( E )

End Sub

transcript
 9 
9
Nothing
Wahr

Im folgenden Programm werden beide Variablen »E« und »O« an das Objekt gebunden, an das auch schon »VBA.Err« gebunden ist. Man sieht keinen Unterschied zwischen den beiden Variablen. Allerdings ist es bei der Variablen »E« bereits von Anfang klar, daß sie für ein Objekt des Typs »VBA.ErrObject« gedacht ist, und so ist sie etwas besser verständlich; außerdem kann die VBA -Implementation es auch als Fehler erkennen, wenn diese Variable dann versehentlich an ein Objekt eines anderen Typs gebunden wird.

Modul1

Option Explicit

Sub Main()

Dim E As VBA.ErrObject
Dim O As Object

Set E = VBA.Err
Debug.Print E is VBA.Err

Set O = VBA.Err
Debug.Print O is VBA.Err
Debug.Print O is E

Let E = 7
Debug.Print O

End Sub

Protokoll
Wahr
Wahr
Wahr
7

Das voranstehende Programm zeigt, daß eine Variable manchmal sowohl allgemein mit »Object« als auch speziell mit einer bestimmten Klasse, wie »VBA.ErrObject« deklariert werden kann. Man sollte eine Variable möglichst immer mit einer speziellen Klasse deklarieren, wenn man schon weiß, daß sie nur entweder an »Nothing« oder an ein Exemplar jener Klasse gebunden werden soll. Der allgemeine Typ »Object« ist für Variablen gedacht, die im Laufe ihrer Existenz an Objekte unterschiedlicher Klassen gebunden werden sollen, oder für die es beim Schreiben nicht bekannt ist, welche Klasse das Objekt hat, an das sie gebunden wird.

IDE-Unterstützung

Eine spezielle Objektvariable enthält selber bereits Informationen über den Inhalt eines Objekts ihres Typs, selbst wenn sie noch gar keine Objekt enthält. Die VBA-IDE kann diese Informationen nutzen, um den Benutzer zu helfen.

Modul1

Option Explicit

Sub Main()

Dim E As VBA.ErrObject

End Sub

Wenn man in der VBA-IDE vor das Ende des obigen Subs »Main« noch eine Zeile einfügt (vor der Zeile mit »End Sub«) und am Anfang der eingefügten Zeile »E.« tippt, so erscheint normalerweise eine Auswahlliste, welche den Inhalt des Namens »E« anzeigt. Es handelt sich bei diesem Inhalt um den Inhalt, den ein Objekt der Klasse des Namens »E« hätte, es handelt sich also um den Inhalt eines VBA.ErrObject-Objektes.

Diese Auswahlliste kann dem Programmierer dabei helfen, einen der möglichen Einträge eines Objekts auszuwählen. So kann man beispielsweise das folgende Programm schreiben.

Modul1

Option Explicit

Sub Main()

Dim E As VBA.ErrObject
Debug.Print E.Number

End Sub

Obwohl der Ausdruck »E.Number« im voranstehenden Programm mit Hilfe der IDE eingegeben wurde, ist er aber nicht korrekt. Startet man das Programm, so erhält man eine Fehlermeldung. Dies liegt daran, daß der Name »E« nur eine Beschreibung  der Einträge des Objektes enthält, aber nicht die vollständigen Einträge. Diese finden sich erst in einem Objekt. Wenn wir den Namen »E« an ein Objekt binden, verschwindet die Fehlermeldung.

Modul1

Option Explicit

Sub Main()

Dim E As VBA.ErrObject
Set E = VBA.Err
Debug.Print E.Number

End Sub

transcript
 0 

Verwendet man statt einer speziellen Objektvariable, die mit »Dim E As VBA.ErrObject« deklariert wird, eine allgemeine Objektvariable, die mit »Dim O As Object« deklariert wird, so läuft das Programm ebenfalls, aber die IDE kann den Programmierer bei einer allgemeinen Objektvariablen nicht mit einer Auswahlliste unterstützen, da keine Klasse für die allgemeine Objektvariable kennt.

Modul1

Option Explicit

Sub Main()

Dim O As Object
Set O = VBA.Err
Debug.Print O.Number

End Sub

transcript
 0 

Allgemeine Objektvariablen sind flexibler, da sie an Objekte verschiedener Klassen gebunden werden können, aber sie bieten weniger Unterstützung in der IDE, weswegen sie nur verwendet werden sollten, wenn ihre Flexibilität wirklich benötigt wird.

Übungsaufgaben

/   Übungsaufgabe

(Diese Übungsaufgabe setzt eine Bearbeitung in Excel  voraus.)

Legen Sie eine allgemeine Objektvariable mit dem Typ »Object« an und binden Sie diese an das Objekt »Excel.Application«.

Geben Sie nun den Wert der Variablen »Caption« jenes Objektes aus, indem Sie die im vorigen Schritt angelegte Objektvariable (und nicht die Schreibweise »Excel.Application«) verwenden und rufen Sie auch die Funktion »CentimetersToPoints« unter Verwendung der Objektvariablen auf.

(Damit auf Excel  zugegriffen werden kann, muß die Excel -Bibliothek in VBA  eingebunden sein. Dies ist normalweise der Fall, wenn der VBE  von Excel  aus geöffnet wird.)

/   Übungsaufgabe

(Diese Übungsaufgabe setzt eine Bearbeitung in Excel  voraus.)

Ermitteln Sie den Typ (also die Klasse) des Objekts »Excel.Application«.

Legen Sie nun eine spezielle Objektvariable mit dem von Ihnen ermittelten Typ an und binden Sie diese an das Objekt »Excel.Application«.

Geben Sie nun den Wert der Variablen »Caption« jenes Objektes aus, indem Sie die im vorigen Schritt angelegte Objektvariable (und nicht die Schreibweise »Excel.Application«) verwenden und rufen Sie auch die Funktion »CentimetersToPoints« unter Verwendung der Objektvariablen auf.

(Damit auf Excel  zugegriffen werden kann, muß die Excel -Bibliothek in VBA  eingebunden sein. Dies ist normalweise der Fall, wenn der VBE  von Excel  aus geöffnet wird.)

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723841 stefan_ram:723841 Spezielle Objektvariablen in VBA Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723841, slrprddef723841, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/spezielle_objektvariablen_vba