スライド上の図形を使用する

Microsoft Office 2000/Visual Basic プログラマーズ ガイド   

PowerPoint プレゼンテーションはスライドの集合で構成されていますが、一般的に PowerPoint スライドは 1 つまたは複数の Shape オブジェクトで構成されています。ピクチャ、タイトル、テキスト、OLE オブジェクト、オートシェイプなど、スライドに含まれるアイテムはすべて Shape オブジェクトです。

スライド上の Shape オブジェクトを参照するには、次の 2 つの方法があります。

  • スライド上の図形の集合にある図形のインデックス値を使用する。図形は、Shapes コレクションに追加された時の位置に等しいインデックス値を持ちます。

  • 図形の名前を使用する。Name プロパティを設定することにより、Shape オブジェクトの名前を指定できます。既定では、PowerPoint はスライドに図形が追加されたときにその名前を設定します。名前付け規則は shapetype n です。shapetype は追加された図形の種類、n は現在の図形が追加されたときのスライド上にある図形の数に 1 を追加した数値です。スライドに最初に追加された図形では n = 2 となります。PowerPoint で使用可能な図形の種類については、Microsoft PowerPoint Visual Basic リファレンス ヘルプの [キーワード] タブで "Shapes コレクション オブジェクト" を選択して、関連するトピックを参照してください。

スライド上の複数の図形で作業するには、Shapes コレクションの Range メソッドを使用します。Range メソッドは、メソッドの引数で指定された図形を含む ShapeRange オブジェクトを返します。Index 引数がない場合、Range メソッドは、スライド上のすべての図形を含む ShapeRange オブジェクトを返します。複数の図形を指定するには、VBA の Array 関数を使用します。Array 関数を使用して複数のアイテムを指定する方法については、この章の「Slide オブジェクトを使用する」で Array 関数に関する説明を参照してください。

スライドに図形を追加する

一般的に、コレクションにアイテムを追加するには、コレクション オブジェクトの Add メソッドを使用します。たとえば、PowerPoint プレゼンテーションにスライドを追加するには、Presentation オブジェクトの Slides コレクションの Add メソッドを使用します。ただし、スライドに図形を追加する場合は多少異なります。PowerPoint オブジェクト モデルでは、スライドに追加できる各図形に対して異なるメソッドが使用されます。たとえば、次の例は、現在のプレゼンテーションの最後に新しいスライドを挿入し、Shapes コレクションの 2 つのメソッドを使用してスライドに図形を追加する方法です。AddTextEffect メソッドはワードアートの図形を追加する場合、AddTextbox メソッドはテキスト ボックスの図形を追加する場合に使用されます。

  Sub AddTestSlideAndShapes()
   ' スライドに図形を追加して、スライドおよび
   ' スライド内の各図形に対して、図形を中央に揃えて
   ' 配置する方法を示します。
   Dim sldNewSlide         As PowerPoint.Slide
   Dim shpCurrShape        As PowerPoint.Shape
   Dim lngSlideHeight      As Long
   Dim lngSlideWidth       As Long
   
   With ActivePresentation
      ' スライドの高さおよび幅を調べます。
      With .PageSetup
         lngSlideHeight = .SlideHeight
         lngSlideWidth = .SlideWidth
      End With
      ' プレゼンテーションの最後に新しいスライドを追加します。
      Set sldNewSlide = .Slides.Add(.Slides.Count + 1, ppLayoutBlank)
      With sldNewSlide
         ' スライドの背景色を指定します。
         .ColorScheme = ActivePresentation.ColorSchemes(3)
         ' AddTextEffect メソッドを使用してワードアートの図形を追加します。
         Set shpCurrShape = .Shapes.AddTextEffect(msoTextEffect16, _
            "名言集", "MS Pゴシック", 44, msoFalse, msoFalse, 100, 100)
         ' ワードアートの図形を、スライド上部の中央に配置します。
         With shpCurrShape
            .Left = (lngSlideWidth - .Width) / 2
            .Top = (lngSlideHeight - .Height) / 8
         End With
         ' テキスト ボックスの図形をスライドに追加し、図形にテキストを追加します。
         Set shpCurrShape = .Shapes _
            .AddTextbox(msoTextOrientationHorizontal, 100, 100, 500, 500)
         With shpCurrShape
            With .TextFrame.TextRange
               .Text = "'今でなければいつですか? 私たちでなければ誰ですか?'" _
                  & vbCrLf & "'現在の時間は二度と訪れません。'" _
                  & vbCrLf & "'国に対して何かを求めるのではなく、 " _
                  & "あなた自身が国のためにできることを探しなさい。'"
               With .ParagraphFormat
                  .Alignment = ppAlignLeft
                  .Bullet = msoTrue
               End With
               With .Font
                  .Bold = msoTrue
                  .Name = "MS Pゴシック"
                  .Size = 24
               End With
            End With
            ' テキスト ボックスを小さくして、現在入力されているテキストに一致させます。
            .Width = .TextFrame.TextRange.BoundWidth
            .Height = .TextFrame.TextRange.BoundHeight
            .Left = (lngSlideWidth - .Width) / 2
            .Top = (lngSlideHeight - .Height) / 2
         End With
      End With
   End With
End Sub

AddTestSlideAndShapes プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH05 サブフォルダに含まれる Shapes.ppt の modShapeCode モジュールにあります。

特定の図形に対するいくつかのプロパティと共にスライドに含まれる Shape オブジェクトの種類を指定する方法の例を参照するには、GetShapeInfo プロシージャを使用します。GetShapeInfo プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH05 サブフォルダに含まれる Shapes.ppt の modShapeCode モジュールにあります。

スライド上に図形を配置する

スライドに図形を追加する際、通常、メソッドでは図形の次元を設定する値を指定する必要があります。この章の「スライドに図形を追加する」で説明されている AddTestSlideAndShapes プロシージャに示されている AddTextEffect メソッドなどでは、図形の Left および Top プロパティの値を指定します。図形の高さと幅は、その図形に含まれるテキストによって指定されます。その他の場合には (AddTestSlideAndShapes プロシージャに示されている AddTextbox メソッドなど)、Shape オブジェクトの Left、Top、Width、および Height プロパティの値を指定する必要があります。

図形の高さと幅はピクセル単位で指定されます。既定のスライド サイズは、幅 720 ピクセル、高さ 540 ピクセルです。スライドの中央は、スライドの左端から 360 ピクセル、スライドの上から 270 ピクセルの場所に位置します。図を水平方向の中央に配置するには、式 (スライドの幅 – 図形の幅) / 2 を使用します。また、図を垂直方向の中央に配置するには、式 (スライドの高さ – 図形の高さ) / 2 を使用します。Presentation オブジェクトの PageSetup プロパティを使用して PageSetup オブジェクトを返すことによって、プレゼンテーション内のスライドの高さと幅の設定をプログラムによって指定または調べてから、PageSetup オブジェクトの SlideHeight および SlideWidth プロパティを使用できます。この方法は、この章の AddTestSlideAndShapes プロシージャに関する説明の部分でも示されています。

スライドまたはスライド上のほかの図形に対して、1 つまたは複数の図形をスライド上に配置するには、ShapeRange オブジェクトの Align または Distribute メソッドを使用します。

図形内でテキストを使用する

スライド上の図形で行う作業には、テキストの追加または変更が多く含まれます。テキスト ボックスの図形のほかにも、多数の Shape オブジェクトにテキストを含めることができます。たとえば、多数のオートシェイプの Shape オブジェクトにテキストを追加できます。

テキストをサポートするすべての図形には、TextFrame オブジェクトを返す際に使用可能な TextFrame プロパティが含まれています。Shape オブジェクトの HasTextFrame プロパティを使用して、図形がテキスト フレームの使用をサポートするかどうかを確認できます。各 TextFrame オブジェクトには HasText プロパティがあり、テキスト フレームにテキストが含まれているかどうかを確認できます。

TextFrame オブジェクトには、TextRange オブジェクトを返す際に使用可能な TextRange プロパティがあります。TextFrame オブジェクトの Text プロパティを使用して、フレーム内のテキストを指定または確認します。PowerPoint の図形に関連付けられているテキストに対する作業を行う場合は、TextRange オブジェクトのプロパティおよびメソッドを使用します。これらのプロパティを使用してテキスト ボックスの図形のテキスト フレームにテキストを追加する例については、この章の「スライドに図形を追加する」の AddTestSlideAndShapes プロシージャに関する説明を参照してください。

メモ   プレースホルダの図形には、PowerPoint のユーザー インターフェイスに表示可能な既定のテキストが含まれていますが、プログラムで使用することはできません。プレースホルダの図形である TextRange オブジェクトの Text プロパティを設定する際、既定のテキストは指定したテキストに置き換えられます。

テキストを含み、TextFrame または TextRange オブジェクトを使用しない Shape オブジェクトがあります。TextEffect プロパティは、ワードアートの図形での作業に使用するプロパティおよびメソッドを含む TextEffectFormat オブジェクトを返します。ワードアートの図形をスライドに追加するには、Shapes コレクションの AddTextEffect メソッドを使用します。ワードアートの図形に含まれるテキストおよび図形の位置は、AddTextEffect メソッドへの引数で指定されます。ワードアートの図形のテキストを変更または読み取るには、TextEffectFormat オブジェクトの Text プロパティを使用します。たとえば、次のコードは、現在のプレゼンテーションにおける最初のスライドに含まれる既存のワードアート図形のテキストを変更します。

  With ActivePresentation
   strExistingText =    .Slides(1).TextEffect.Text
   If Len(strNewText) <= Len(strExistingText) Then
      .Slides(1).TextEffect.Text = strNewText
   End If
End With

このコードは、新しいテキストが既存のテキストより長くならないことを確認します。ワードアートの図形には新しいテキストを適応させるためにサイズを自動的に変更する機能がないため、このステップが必要になります。その代わりの方法として、既存のワードアート図形のプロパティを保存した後にこのワードアート図形を削除して、そのプロパティと同様のプロパティを使用する新しいワードアート図形に置き換えることもできます。

ワードアート図形をスライドに追加する例については、この章の「スライドに図形を追加する」の AddTestSlideAndShapes プロシージャに関する説明を参照してください。