Es gibt die verschiedensten Arten von Objekten: Autos, Häuser, Bäume usw. Jede Art von Objekt lässt sich allgemein beschreiben. So hat z. B. eine Datei unter anderem eine bestimmte Größe und ein Änderungsdatum. Es muss nur ein einziges Mal definiert sein, dass so etwas zu einer Datei gehört, dann wissen wir: Jede beliebige Datei hat diese Eigenschaften.
Ebenso verhält es sich mit den Objekten in der Programmierung: Die Festlegung, welche Elemente zu einer bestimmten Art von Objekt gehört, erfolgt in einer Klasse. Von der Klasse können dann beliebig viele Objekte abgeleitet werden.
In VBA können wir dazu über
Einfügen/Klassenmodul
ein Klassenmodul erstellen und über das Eigenschaftenfenster
(Ansicht/Eigenschaften
) den Namen des Klassenmoduls zu Auto
ändern. Auch, wenn dieses Modul noch vollständig leer ist: Damit existiert schon
eine Klasse namens Auto
. Wir können das testen, indem wir in einem
Standardmodul eingeben...
Dim Opel As Auto
IntelliSense zeigt bei der Eingabe
Auto
in der
Vorschlagsliste an. Auto
ist also schon als Objekt vorhanden.
Nun kann man so viele Autos im Code einbauen, wie man möchte. Jedes ist ein
eigenes Objekt mit allen Elementen aus Auto
.
Public Sub Autos() Dim Familienkutsche As Auto Dim Sonntagswagen As Auto Dim Oldtimer As Auto
Allerdings haben so die beschriebenen Fahrzeuge nur einen Verweis auf die
Objektdefinition Auto
. Damit ist nur festgelegt, dass diese
Variablen existieren und ausschließlich je ein Auto
-Objekt enthalten
können. Neue Objekte müssen darüber hinaus noch erzeugt werden:
Public Sub Autos() Dim Familienkutsche As Auto Set Familienkutsche = New Auto
Objektzuweisungen erfordern die Set
-Anweisung, und New
erstellt dann das eigentliche Objekt (eine neue Instanz der Klasse). Solange noch
keine Objektzuweisung erfolgt ist, enthält eine Objektvariable den speziellen Wert
Nothing
. Objektdeklaration und -zuweisung kann auch in nur einem Schritt
erfolgen:
Public Sub Autos() Dim Familienkutsche As New Auto
Die Unterscheidung zwischen Objektdeklaration und -zuweisung wird vielleicht
klarer, wenn man das obige Beispiel mit Dim Familienkutsche As Object
wiederholt: Jetzt handelt es sich bei Familienkutsche
um ein allgemeines
Objekt, und erst eine Set
-Anweisung bestimmt, um welche Art von Objekt
es sich überhaupt handelt.