Anwendungsobjekte

Aus VBA-wiki
Zur Navigation springen Zur Suche springen

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 CellsPoint.png 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:
    CellProps.png

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.