Objekte beherrschen

Aus VBA-wiki
Zur Navigation springen Zur Suche springen

Objekte werden uns von den Anwendungen (Word, Excel, PowerPoint etc.) zur Verfügung gestellt oder können vom Entwickler selbst durch eigene Klassen erstellt werden.

Generelles zu Objekten

Deklaration

Objektvariablen werden wie jede andere Variable deklariert:

Dim myObject as Whatever

Instanziierung

Bevor eine Objektvariable verwendet werden kann, muss sie instanziiert werden. Hierbei erhält die Variable die Adresse des Objektes. Dies erfolgt mit der 'Set'-Anweisung:

Set myObject = Whatever

Anwendungsobjekte stellen ein tatsächlich existierende Elemente (eine Anwendung, ein Dokument, einen Absatz, eine Tabellenzelle, ein Rechteck usw.) dar. Deshalb erfolgt deren Instanziierung NICHT mit dem Schlüsselwort 'New'!

Set docDocument = ActiveDocument

Eigene Klassenobjekte und Dialoge (UserForms) hingegen müssen vor ihrem Einsatz neu erstellt werden, weil sie noch nicht existieren und daher noch keine Objektadresse besitzen. Deshalb erfolgt hierbei die Instanziierung mit dem Schlüsselwort 'New'.

Set myDialog = New frmDialog

Wenn eine bestehende Instanz übernommen wird, also das Objekt von einer Variablen in eine andere Objektvariable kopiert wird, entfällt auf jeden Fall das Schlüsselwort 'New'!

Set myCopy = myOriginal

Objekte prüfen

Die Prüfung, ob eine Objektvariable schon instanziiert wurde, erfolgt mit dem 'Is Nothing'-Vergleich:

If myObject Is Nothing Then Set myObject = New clsObject

Objektreferenzen ausdrücklich zerstören

Objektreferenzen haben den hier beschriebenen Geltungbereich: Variablen: Geltungsbereich, Lebensdauer und Formen der Deklaration.

Sie werden beim Verlassen ihres Geltungsraumes automatisch zerstört. Wenn Sie eine Objektreferenzen explizit zerstören möchten (oder müssen), erfolgt die wie hier beschrieben:

Set myObject = Nothing

Dies kann zum Beispiel sinnvoll sein, wenn Sie einen Dialog wegen einer Fehleingabe neu aufrufen müssen. Wenn Sie 'Set myDialog = Nothing' einsetzen, sind Sie sicher, dass die vorgehende Instanz des Dialogs tatsächlich nicht mehr existiert.

Methoden und Eigenschaften

Die Methoden eines Objektes entsprechen ausführbaren Befehlen, welche am Objekt ausgeführt werden können. Die Eigenschaften entsprechen Einstellungen, welche das Objekt betreffen.

Die Methoden und Eigenschaften eines Objektes sprechen Sie an, indem Sie das Objekt selbst (bei Anwendungsobjekten) oder die Objektvariable mit einem Punkt abschließen und dann die Eigenschaft bzw. die Methode benennen. Der VBA-Editor bietet Ihnen hierzu die Auswahl der Möglichkeiten als Liste an:

CellProps.png

Hierbei werden die Methoden wie ein fliegender, grüner Ziegelstein (oder Radiergummi?) und die Eigenschaften wie eine kleine Tabelle, auf die ein Finger zeigt, dargestellt.

Weiterführende Anwendungsobjekte

Eigenschaften können selbst auf weitere (Unter-)Objekte verweisen, welche wiederum eigene Eigenschaften und Methoden besitzen:

   Application.ActiveDocument.Words(2).Font.Bold = True

Weiterführende Klassenobjekte

Weiterführende Objekte können auch von eigenen Klassen angeboten werden, indem die Eltern-Klasse eine Funktion anbietet, welche als Rückgabewert eine weitere Klasse verwendet:

In der Klasse 'clsToolsString' finden wir folgende Funktion:

Public Function ListTools() As clsToolsList
   
    Set ListTools = New clsToolsList
End Function

Somit kann über die 'StringTools' direkt auf die verwandte 'ListTools' zugegriffen werden:

strList = Tools.StringTools.ListTools.AddItemToList(strList, "New Item")
  • 'Tools' ist der Name des Moduls, in dem sich die Funktion 'StringTools' befindet, deren Rückgabewert die Klasse 'clsToolsString' ist
  • In der Klasse 'clsToolsString' befindet sich eine Funktion 'ListTools' mit dem Rückgabewert 'clsToolsList'
  • In der Klasse 'clsToolsList' befindet sich die Funktion 'AddItemToList'

Kurzschreibweise mit With

Sie können die Zuweisung mehrerer Eigenschaften eines Objektes auf folgende Weise übersichtlicher gestalten:

   With ActiveDocument.Words(2).Font
       .Bold = False
       .Italic = False
       .Underline = False
       .SmallCaps = False
       '...
   End With

Nach 'With' wird das übergeordnete Objekt angegeben, hier die Schriftart des zweiten Wortes im aktuellen Dokument. Innerhalb des With-Blocks kann dann die Angabe des übergeordneten Objektes entfallen. Der With-Block wird dann mit 'End With' abgeschlossen.

Ausgeschrieben würde die Zuweisung wie folgt aussehen:

   ActiveDocument.Words(2).Font.Bold = False
   ActiveDocument.Words(2).Font.Italic = False
   ActiveDocument.Words(2).Font.Underline = False
   ActiveDocument.Words(2).Font.SmallCaps = False
   '...

With-Blöcke können beliebig tief verschachtelt werden:

   With ActiveDocument.Words(2).Font
       .Bold = False
       .Italic = False
       .Underline = False
       .SmallCaps = False
       With .Borders
           .Enable = True
           .Shadow = True
       End With
   End With