やりたいこと
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
全シェイプに対して、複数の処理を行うときは、コレクションを利用するのがよいと思われます。