図形 (描画オブジェクト) を使用する

図形 (描画オブジェクト) は、Shapes コレクション、ShapeRange コレクション、および Shape オブジェクトの 3 つのオブジェクトで表されます。 通常、Shapes コレクションでは、図形を作成したり、スライドのすべての図形を反復処理したりします。Shape オブジェクトでは、単一の図形を修正します。ShapeRange コレクションでは、画面上で処理するのと同じ方法で複数の図形を修正します。

図形にプロパティを設定する

図形のほとんどの書式設定プロパティは、Shape または ShapeRange オブジェクトに直接適用されるプロパティでは設定されません。 その代わりに、関連する図形属性が、図形の塗りつぶしに関するすべてのプロパティを含む FillFormat オブジェクトや、リンクした OLE オブジェクトに固有のすべてのプロパティを含む LinkFormat オブジェクトなどの従属オブジェクトの下にグループ化されます。 図形のプロパティを設定するには、最初に関連する図形の属性のセットを表すオブジェクトを取得して、取得したオブジェクトのプロパティを設定する必要があります。 たとえば、Fill プロパティを使用して FillFormat オブジェクトを取得し、次に、FillFormat オブジェクトの ForeColor プロパティを設定し、次の使用例に示すように指定した図形の前景色に塗りつぶしを設定します。

Set myDocument = ActivePresentation.Slides(1)
myDocument.Shapes(1).Fill.ForeColor.RGB = RGB(255, 0, 0)

同時に複数の図形にプロパティまたはメソッドを適用する

画面上で複数の図形を選択して処理を加えるにはいくつかの方法があります。たとえば、複数の図形を選択し、塗りつぶしを同時に設定できます。 選択した単一の図形にだけ処理を加えることもできます。単一の図形が選択されている場合は、その図形のテキストだけを編集します。

Visual Basic では、図形セットにプロパティやメソッドを適用する場合に 2 つの方法があります。 次の 2 つの方法を使用すると、画面上で同じ操作を実行できるかどうかに関係なく、図形範囲内の単一の図形でどのような処理でも実行できます。

  • 画面上の複数の選択したオブジェクトに処理を行う場合は、処理する図形を含む ShapeRange コレクションを作成し、ShapeRange コレクションに適切なプロパティとメソッドを直接適用し、Visual Basic で同じ処理を実行できます。

  • 画面上で選択した複数の図形に対して処理を実行できない場合は、処理する図形を含む Shapes コレクションまたは ShapeRange コレクションをループし、コレクション内のそれぞれの Shape オブジェクトに適切なプロパティやメソッドを適用して Visual Basic で処理を実行できます。

Shape オブジェクトおよび ShapeRange コレクションに適用されるほとんどのプロパティやメソッドは、特定の種類の図形によっては正しく動作しない場合があります。 たとえば、 TextFrame プロパティを、テキストを含むことができない図形に適用すると失敗します。 ShapeRange コレクションの各図形が適用されるプロパティやメソッドを持つことができるかどうかがわからない場合は、 ShapeRange コレクションにそれらを適用しないでください。 これらのプロパティやメソッドのいずれかを図形のコレクションに適用する場合は、適用する前にそれぞれのコレクションをチェックし、それぞれの図形を調べて適切な図形であることを確認する必要があります。

ShapeRange コレクションにプロパティまたはメソッドを適用する

画面上の選択した複数の図形に対して処理を同時に実行できる場合、ShapeRange コレクションを作成し、そのコレクションに適切なプロパティまたはメソッドを設定して、同等のプログラムを作成できます。 次の使用例は、 myDocument に "Big Star" および "Little Star" という名前の AutoShapes を含む図形範囲を作成し、それらに塗りつぶしのグラデーションを設定します。

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

次に、プロパティやメソッドを ShapeRange コレクションに適用する場合の動作について一般的なガイドラインを示します。

  • コレクションにメソッドを適用することは、そのコレクション内の各 Shape オブジェクトにメソッドを適用することと同じです。

  • コレクションのプロパティ値を設定することは、その範囲の各図形のプロパティ値を設定することと同じです。

  • 定数を取得するコレクションのプロパティは、コレクションのすべての図形がそのプロパティに対して同じ値を持つ場合は、コレクションの各図形のプロパティ値を取得します。 コレクションのすべての図形がそのプロパティに対して同じ値を持たない場合は、複数の値の異なる定数を取得します。

  • 長整数型 (Long)、単精度浮動小数点型 (Single)、文字列型 (String) など、単一なデータ型を取得するコレクションのプロパティは、コレクションのすべての図形がそのプロパティに対して同じ値を持つ場合、各図形のプロパティ値を取得します。

  • プロパティの中には、コレクションに 1 つだけ図形がある場合のみ、値を取得または設定できるものがあります。 コレクションに複数の図形がある場合は、実行時エラーが発生します。 この状況は、通常、画面から行う操作 (図形のテキストの編集、フリーフォームの頂点の編集など) が単一の図形でのみ実行可能な場合に、プロパティを取得または設定しようとすると発生します。

これらのガイドラインは FillFormat オブジェクトなど、ShapeRange コレクションの従属オブジェクトの下にグループ化される、図形のプロパティを設定する場合にも該当します。 従属オブジェクトが画面上の複数の選択したオブジェクトで実行できるオペレーションを表し、ShapeRange コレクションからオブジェクトを取得したり、プロパティを設定できます。 たとえば、 Fill プロパティを使用して、 ShapeRange コレクションのすべての図形の塗りつぶしを表す FillFormat オブジェクトを取得できます。 この FillFormat オブジェクトのプロパティを設定すると、ShapeRange コレクションの個別のすべての図形に同じプロパティが設定されます。

Shapes コレクションまたは ShapeRange コレクションをループする

図形を選択してコマンドを使用することにより、画面上で複数の図形に対して処理を同時に実行できない場合は、Shapes コレクションまたは処理する図形を含む ShapeRange コレクションをループし、コレクション内のそれぞれの Shape オブジェクトに適切なプロパティやメソッドを適用することで、プログラムを使用して同様の処理を実行できます。 次の例では、myDocument のすべての図形をループして、AutoShape である各図形にテキストを追加します。

Set myDocument = ActivePresentation.Slides(1) 
For Each sh In myDocument.Shapes 
    If sh.Type = msoAutoShape Then 
        sh.TextFrame.TextRange.InsertAfter " (version 1)" 
    End If 
Next

次の使用例は、作業中のウィンドウで現在選択されているすべての図形を含む ShapeRange コレクションを作成し、そのコレクションの中でテキストを含むことができる図形にテキストを設定します。

For Each sh in ActiveWindow.Selection.ShapeRange
    If sh.HasTextFrame Then
        sh.TextFrame.TextRange = "Initially selected"
    End If
Next

図形範囲の図形を配置、整列、グループ化する

複数の図形をお互いの図形またはその図形を含むスライドに対して整列するには、Align および Distribute メソッドを使用します。 複数の図形から単一のグループ化した図形を作成するには、Group メソッドまたは Regroup メソッドを使用します。

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。