LoginSignup
2
2

More than 5 years have passed since last update.

全シェイプをコレクションに格納する

Posted at

やりたいこと

PowerPointでVBAを作っていると、全シェイプに対して何らかの処理を適用したいことがよくあります。
このとき、毎回下記のようなコードを書くので、コードが長くなりがちです。特に、各シェイプに対する処理にif文などが入ると、階層も深くなりコードが見にくくなります。
これをもっと見やすく書く方法を考えます。

Module1.bas
Public Sub sample1()
    Dim sld As Slide
    Dim sh As Shape

    '処理ごとにこれを書く
    For Each sld In ActivePresentation.Slides
        For Each sh In sld.Shapes
            '各シェイプに対する処理
            Debug.Print sh.Name
        Next
    Next

End Sub

コレクションオブジェクトを利用する

プレゼンテーション内の全シェイプを、一度コレクションに格納します。
そうすれば、全シェイプに対する処理を簡単に書けます。

Module2.bas
Public Sub test()
    Dim sld As Slide
    Dim sh As Shape
    Dim shCol As Collection

    'スライド内の全シェイプをコレクションに格納
    Set shCol = New Collection

    For Each sld In ActivePresentation.Slides
        For Each sh In sld.Shapes
            shCol.Add sh
        Next
    Next

    '以後は、処理ごとにこれを書く
    Call testMethod1(shCol)

End Sub

Private Sub testMethod1(ByRef col As Collection)
    Dim sh As Shape

    For Each sh In col
        '全シェイプに対する処理を書く
        Debug.Print sh.Name
    Next
End Sub

全シェイプに対して、複数の処理を行うときは、コレクションを利用するのがよいと思われます。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2