インストールレスプログラミング( ´ー`)

VBA , JavaScript , HTAなど 365アプリはインストール必要ですが、仕事に無いケースはほぼないから(・_・;)

パワーポイント VBAで複数の図形を扱うメモ

以前,当たり判定を作るときに複数の図形を選んだりするのをやってたんですが,

今回それをすっかり忘れてしばらく格闘していたので,その部分のメモ。

該当する部分は,

Dim arr As String
For i = 1 To 粒子数
    arr = arr & vbTab & 粒子(i).Name
Next

With TargetSlide.Shapes.Range(Split(arr, vbTab)).Group
    .Name = "原子核"
End With

ここです。Shapes.Range()の中に図形のインデックスか図形の名前の配列を放り込まないといけないみたいですが,スマートに書く方法を思いつけませんでした。

図形のインデックスはちょっと制御するのが難しいので,ここでは名前を利用しています。

だいぶ配列等を使う機会は増えたんですが,Shapes.Range()の中にいろいろな形式で放り込んでみて,上記以外の方法は怒られてしまい,達成できませんでした。

arr(0),arr(1),arr(2)とかにShapeを放り込んで入れてarrを放り込んでも怒られました。

ループを使って複数の図形をうまいことShapes.Range()の中に入れる方法を知りたい。

上の例は,最終的にそれなりに気に入ってますし,Splitは大好きだからいいんですが,Splitで入れれるなら,配列でもいけそうなのにな。

Array関数とかまだまだ弱いんですよね。。( ´ー`)フゥー...

--追記--
お風呂入って考えて,もう一度いろいろ調べてみました。
Shapeオブジェクトを放り込もうとしたらやっぱり怒られましたが,
f:id:chemiphys:20170205223219p:plain
このように指摘がありました。このエラーメッセージは親切だ,これならなんとなくわかるなぁと考え直して,

f:id:chemiphys:20170205223608p:plain

Sub a()
Dim TargetSlide As Slide: Set TargetSlide = ActivePresentation.Slides(1)

Dim ShapeName(1 To 3) As String, i As Long
For i = 1 To 3
    ShapeName(i) = "shp" & i
Next
TargetSlide.Shapes.Range(ShapeName).Group

End Sub

コウイウコトカ! d(゚ー゚d(゚ー゚)b゚ー゚)b
f:id:chemiphys:20170205223658p:plain