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.
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.
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.