Klassen

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/KlassenmodulKlassenmodul 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 KlassenmodulAuto 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.