Anwendungsobjekte
Anwendungsobjekte entsprechen den ebenfalls besprochenen Klassenobjekten, werden jedoch nicht von einem VBA-Entwickler, sondern von den Anwendungen selbst, also von Word, Excel, PowerPoint etc., zur Verfügung gestellt.
Anwendungsobjekte stellen dem VBA-Entwickler die Möglichkeiten zur Verfügung, mit allen Aspekten der Office-Anwendungen zu interagieren und diese durch Programmierung zu verändern.
Deklaration und Instanziierung
Ein Anwendungsobjekt wird wie üblich deklariert:
Dim tblTable As Table Private tblTable As Table Public ActiveTable As Table
Die Instanziierung erfolgt mit 'Set', jedoch nicht, wie bei Klassenobjekten, mit dem Schlüsselwort 'New'.
Set tblTable = New Table ' Erzeugt Laufzeitfehler 429!!
Stattdessen übernehmen sie die Referenz auf ein bestehendes, reelles Objekt:
Set tblTable = Selection.Tables(1)
Die meisten Objekte sind ein Element in einer Auflistung, die Erzeugung eines neuen Elements erfolgt demnach in der Regel mit 'Add':
Set tblTable = ActiveDocument.Tables.Add(Selection.Range, 3, 5)
Die 'Add'-Funktion gibt die Referenz auf die neu erstellte Tabelle an die Variable zurück.
Anwendungsobjekte in Excel
Einige der wichtigen Anwendungsobjekte in Excel wurden von den Entwicklern nicht als solche deklariert, sondern gelten als generische Objekte ohne eigene Eigenschaften und Methoden. Dies erkennen wir daran, dass eine angesprochene Zelle zum Beispiel keine weiteren Eigenschaften im VBA-Editor anzeigt: Die Eingabe von bewirkt nicht, wie bei Word und PowerPoint, die Anzeige der Eigenschaften und Methoden. Um dennoch in den Genuss der Unterstützung durch den VBA-Editor zu kommen, gehen Sie wie folgt vor:
- Versuchen Sie, mithilfe der Hilfe (F1) herauszufinden, welchem Anwendungs-Objekttyp das gesuchte Element entspricht
- Deklarieren Sie eine Variable mit dem tatsächlichen Datentyp
- Übergeben Sie das Element der Variable mit 'Set' Nun steht Ihnen bei der Verwendung der Variablen die gesamte Unterstützung des VBA-Editors zur Verfügung. Im obigen Beispiel (Eigenschaften einer Zelle) sieht der entsprechende Code, nachdem wir festgestellt haben, dass eine Excel Zelle ein Range-Objekt ist, wie folgt aus:
Besondere Eigenschaften und Methoden
Die 'Parent'-Eigenschaft
Die Parent-Eigenschaft liefert das Objekt zurück, von dem das aktuelle Objekt entstammt. Das Parent-Objekt ist ein generisches Objekt und kann deshalb seine Eigenschaften und Methoden nicht im VBA-Editor offenbaren.
- Beispiel
- Sie haben eine Hilfsprozedur geschrieben, welche eine PowerPoint-Tabelle für die Übernahme von Daten aus Excel vorbereiten soll. Die Prozedur erhält drei Parameter: Die Tabelle als Table, und die gewünschte Zeilen- und Spaltenzahl als Ganzzahl.
Private Sub PrepareTable(ByVal tbl As Table, ByVal lngRows As Long, ByVal lngColumns As Long) End Sub
- Sie löschen in Ihrer Programmierung überschüssige Zeilen und Spalten oder fügen sie entsprechend den Vorgaben hinzu.
- Sie stellen fest, dass beim Hinzufügen von Spalten die Tabelle ihre bisherige Breite beibehält und möchten deshalb die Breite der Tabelle anpassen, damit sich die neuen Spalten nicht in den ursprünglichen Raum drängen müssen.
- Sie stellen außerdem fest, dass die Breite der Tabelle von der Form vorgegeben wird (PowerPoint-Tabellen liegen in PowerPoint-Formen). Diese Prozedur erwartet jedoch nur die Tabelle, nicht die Form als Parameter.
- Lösung
- Sie könnten die Form ebenfalls als Parameter übergeben lassen.
- Sie könnten die Parent-Eigenschaft der Tabelle verwenden, um auf die Form zuzugreifen:
tbl.Parent.Width = sngNewWidth
- Wenn Sie tbl.Parent eingeben und dann den Punkt setzen, werden Ihnen keine Eigenschaften oder Methoden im VBA-Editor angezeigt, denn der Editor weiß nicht, was sich hinter der Parent-Eigenschaft verbirgt.
- Sie können trotzdem die 'Width'-Eigenschaft eintippen, denn bei der Ausführung des Codes wird Excel bestätigen, dass der Parent der Tabelle, eine Form, die 'Width'-Eigenschaft zur Verfügung stellt.