VBA-Programmierung in Microsoft Excel

Tutorial: Excel-Beispiele

VBA-Begriff: Arbeiten mit Formen (Zeichnungsobjekten)

Formen, oder Zeichnungsobjekte, werden durch die folgenden drei unterschiedlichen Objekte dargestellt: Shapes-Auflistung, ShapeRange-Auflistung und Shape-Objekt. Die Shapes-Auflistung verwenden Sie allgemein zum Erstellen von Formen zum Durchgehen aller Formen in einem Tabellenblatt; das Shape-Objekt verwenden Sie zum Formatieren oder Ändern einer einzelnen Form; die ShapeRange-Auflistung verwenden Sie zum Ändern mehrerer Formen auf die gleiche Art, wie Sie auf der Benutzeroberfläche mit mehreren Formen arbeiten.

Festlegen der Eigenschaften für eine Form

Viele Formateigenschaften werden nicht durch Eigenschaften festgelegt, die direkt auf das Shape- oder das ShapeRange-Objekt angewendet werden. Stattdessen werden verwandte Formeigenschaften unter Sekundärobjekten zusammengefasst, beispielsweise dem FillFormat-Objekt, das alle Eigenschaften enthält, die sich auf die Füllung der Form beziehen, oder dem LinkFormat-Objekt, das alle Eigenschaften enthält, die sich ausschließlich auf verknüpfte OLE-Objekte beziehen. Um Eigenschaften für eine Form festzulegen, müssen Sie zuerst das Objekt zurückgeben, das den Satz verwandter Formeigenschaften darstellt, und anschließend die Eigenschaften dieses zurückgegebenen Objekts festlegen. Beispielsweise können Sie mit der Fill-Eigenschaft das FillFormat-Objekt zurückgeben und danach die ForeColor-Eigenschaft des FillFormat-Objekt so festlegen, dass für die angegebene Form die Füllfarbe des Vordergrunds bestimmt wird. Dies wird im folgenden Beispiel verdeutlicht.

Worksheets(1).Shapes(1).Fill.ForeColor.RGB = RGB(255, 0, 0)

Gleichzeitiges Anwenden einer Eigenschaft oder Methode auf mehrere Formen

Auf der Benutzeroberfläche gibt es einige Operationen, die sich auch bei mehreren markierten Formen ausführen lassen; beispielsweise können Sie mehrere Formen markieren und ihre einzelnen Füllungen gleichzeitig festlegen. Andere Operationen lassen sich nur bei einer einzelnen markierten Form ausführen. Beispielsweise können Sie den Text in einer Form nur dann bearbeiten, wenn eine einzelne Form markiert ist.

Visual Basic bietet zwei Möglichkeiten, Eigenschaften und Methoden auf mehrere Formen anzuwenden. Bei beiden können Sie jeden Vorgang, den Sie mit einer einzelnen Form ausführen, auch mit einem Formbereich ausführen, unabhängig davon, ob sich der Vorgang auf der Benutzeroberfläche durchführen lässt oder nicht.

  • Wenn die Operation auf der Benutzeroberfläche bei mehrfach markierten Formen funktioniert, können Sie die gleiche Operation in Visual Basic durchführen, indem Sie eine ShapeRange-Auflistung bilden, die alle Formen enthält, mit denen Sie arbeiten möchten, und die entsprechenden Eigenschaften und Methoden direkt auf die ShapeRange-Auflistung anwenden.

  • Wenn die Operation auf der Benutzeroberfläche bei mehrfach markierten Formen nicht funktioniert, können Sie die Operation trotzdem in Visual Basic durchführen, indem Sie in der Shapes-Auflistung oder in einer ShapeRange-Auflistung, die alle zu bearbeitenden Formen enthält, einen Schleifendurchlauf ausführen und die entsprechenden Eigenschaften und Methoden auf die einzelnen Shape-Objekte der Auflistung anwenden.

Viele Eigenschaften und Formen, die sich auf das Shape-Objekt und die ShapeRange-Auflistung anwenden lassen, schlagen bei bestimmten Arten von Formen fehl, so beispielsweise die TextFrame-Eigenschaft, wenn Sie auf eine Form angewendet wird, die keinen Text enthalten kann. Solange Sie sich nicht sicher sind, dass eine bestimmte Eigenschaft oder Methode auf jede Form in einer ShapeRange-Auflistung angewendet werden kann, wenden Sie sie nicht auf die ShapeRange-Auflistung an. Wenn Sie eine dieser Eigenschaften oder Methoden auf eine Auflistung von Formen anwenden möchten, müssen Sie zuvor die Auflistung in einer Schleife bearbeiten, um durch einen Test jeder einzelnen Form sicherzustellen, dass es sich um eine gültige Form handelt.

Erstellen einer ShapeRange-Auflistung, die alle Formen eines Blattes enthält

Sie können ein ShapeRange-Objekt erstellen, das alle Shape-Objekte eines Blattes enthält, indem Sie die Formen markieren und anschließend mit Hilfe der ShapeRange-Eigenschaft ein ShapeRange-Objekt zurückgeben, das alle markierten Formen enthält.

Worksheets(1).Shapes.Select
Set sr = Selection.ShapeRange

In Microsoft Excel ist das Argument Index nicht optional für die Range-Eigenschaft der Shapes-Auflistung. Deshalb können Sie diese Eigenschaft ohne Argument nicht verwenden, um ein ShapeRange-Objekt zu erstellen, das alle Formen einer Shapes-Auflistung enthält.

Anwenden einer Eigenschaft oder Methode auf eine ShapeRange-Auflistung

Wenn Sie auf der Benutzeroberfläche eine Operation für mehrfach markierte Formen gleichzeitig durchführen können, so gelingt sie Ihnen auch von einem Programm aus, indem Sie eine ShapeRange-Auflistung bilden und anschließend darauf die entsprechenden Eigenschaften und Methoden anwenden. Im folgenden Beispiel wird ein Formbereich gebildet, der in myDocument die Formen "Großer Stern" und "Kleiner Stern" enthält, die mit einem frei beweglichen Farbverlauf versehen werden.

Set myDocument = Worksheets(1)
Set myRange = myDocument.Shapes.Range(Array("Big Star", _
    "Little Star"))
myRange.Fill.PresetGradient _
    msoGradientHorizontal, 1, msoGradientBrass

Es folgen allgemeine Richtlinien dazu, wie sich Eigenschaften und Methoden verhalten, wenn sie auf eine ShapeRange-Auflistung angewendet werden.

  • Das Anwenden einer Methode auf die Auflistung führt zu demselben Ergebnis wie das Anwenden der Methode auf jedes einzelne Shape-Objekt dieser Auflistung.

  • Das Festlegen eines Wertes für eine Eigenschaft der Auflistung führt zu demselben Ergebnis wie das Festlegen des Wertes für die Eigenschaft jeder einzelnen Form dieses Bereichs.

  • Eine Eigenschaft der Auflistung, die eine Konstante zurückgibt, gibt den Wert der Eigenschaft einer einzelnen Form dieser Auflistung zurück, falls alle Formen in der Auflistung für diese Eigenschaft den gleichen Wert besitzen. Besitzen nicht alle Formen der Auflistung diesen Wert, so wird eine "Misch"-Konstante zurückgegeben.

  • Eine Eigenschaft der Auflistung, die einen einfachen Datentyp (Long, Single oder String) zurückgibt, gibt den Wert der Eigenschaft für eine einzelne Form zurück, falls alle Formen in der Auflistung für diese Eigenschaft den gleichen Wert besitzen.

  • Der Wert mancher Eigenschaften kann nur dann zurückgegeben oder festgelegt werden, wenn sich in der Auflistung genau eine Form befindet. Gibt es mehr als eine Form in der Auflistung, so tritt ein Laufzeitfehler auf. Dies ist allgemein beim Setzen und Zurückgeben von Eigenschaften der Fall, wenn die dementsprechende Aktion auf der Benutzeroberfläche nur für eine einzelne Form möglich ist (z. B. Bearbeiten von Text in einer Form oder Bearbeiten von Punkten eines Freihandobjekts).

Diese Richtlinien gelten auch, wenn Sie Eigenschaften von Formen festlegen, die unter Sekundärobjekten der ShapeRange-Auflistung, z. B. dem FillFormat-Objekt, gruppiert sind. Wenn das Sekundärobjekt Operationen darstellt, die auf der Benutzeroberfläche bei mehrfach markierten Objekten ausführbar sind, können Sie das Objekt aus der ShapeRange-Auflistung zurückgeben und seine Eigenschaften festlegen. Beispielsweise können Sie die Fill-Eigenschaft verwenden, um das FillFormat-Objekt zurückzugeben, das die Füllungen aller Formen in der ShapeRange-Auflistung darstellt. Durch das Festlegen der Eigenschaften dieses FillFormat-Objekts werden die gleichen Eigenschaften für alle einzelnen Formen in der ShapeRange-Auflistung festgelegt.

Durchlaufen einer Shapes- oder ShapeRange-Auflistung in einer Schleife

Selbst wenn auf der Benutzeroberfläche ein Vorgang für mehrere Formen gleichzeitig durch deren Markierung und anschließendes Verwenden eines Befehls nicht durchführbar ist, können Sie dennoch die entsprechende Aktion von einem Programm aus ausführen, indem Sie in einer Shape- oder ShapeRange-Auflistung, die die zu bearbeitenden Formen enthält, in einem Schleifendurchlauf die entsprechenden Eigenschaften und Methoden auf die einzelnen Shape-Objekte der Auflistung anwenden. Im folgenden Beispiel werden alle Formen in myDocument in einer Schleife bearbeitet und die Vordergrundfarbe für jede Form, die eine AutoForm ist, geändert.

Set myDocument = Worksheets(1)
For Each sh In myDocument.Shapes
    If sh.Type = msoAutoShape Then
        sh.Fill.ForeColor.RGB = RGB(255, 0, 0)
    End If
Next

Im folgenden Beispiel wird eine ShapeRange-Auflistung gebildet, die alle aktuell markierten Formen im aktiven Fenster enthält, und für jede markierte Form die Vordergrundfarbe festgelegt.

For Each sh in ActiveWindow.Selection.ShapeRange
    sh.Fill.ForeColor.RGB = RGB(255, 0, 0)
Next

Ausrichten, Verteilen und Gruppieren von Formen in einem Formbereich

Mit den Methoden Align und Distribute können Sie einen Satz von Formen in relativer Position zueinander oder relativ zu dem Dokument, in dem sie sich befinden, positionieren. Mit der Group- oder der Regroup-Methode können Sie aus einem Satz von Formen eine einzelne gruppierte Form bilden.