パワーポイントの図形のインデックスについて
図形のグループ化について,飽きもせずいろいろと確認作業をしているんですが,
名前でグループ化は前回の記事のようにできるようになりました。
でも,問題はあります。
コピー貼り付けすると,同じ名前の図形が大量に発生するんですよね。図形の名前は万能ではない。
やっぱりインデックスが無いと制御できないこともあるよなーと思いました。。ということで,調べてました。
解決法は見つからなかったんだけど,IDはどうも一意的な値,For eachを回すと,インデックス順にIDを取得できる。
Sub b() Dim TargetSlide As Slide: Set TargetSlide = ActivePresentation.Slides(1) Dim ShapeID() As Long ReDim ShapeID(1 To TargetSlide.Shapes.Count, 1 To 2) Dim i As Long: i = 1 Dim s As Shape For Each s In TargetSlide.Shapes ShapeID(i, 2) = i ShapeID(i, 1) = s.Id i = i + 1 Next 'この時点でShapeID(i,1)にShapeのID,ShapeID(i,2)にインデックスが入るのでIDからインデックスを知ることができる。 Dim col As New Collection: Set col = New Collection For Each s In TargetSlide.Shapes If s.Left > 200 And s.Left + s.Width < 600 Then col.Add s.Id End If Next Dim arr() As Long: ReDim arr(1 To col.Count) Dim j As Long For i = 1 To col.Count For j = 1 To TargetSlide.Shapes.Count If col(i) = ShapeID(j, 1) Then arr(i) = ShapeID(j, 2) End If Next Next TargetSlide.Shapes.Range(arr).Group End Sub
試しに寝る前に急いで作ったんですが,
配列にID,インデックス変換データを持たせる。
ある条件に該当する特定の図形,状況によると思いますが,今はLeftプロパティで図形をとりあえず選んでる。
数はわからないので,こういうのはコレクションに放り込む。今回はグループ化目的なので中には楽にするようにIDを放り込む
さいごにグループ化するために,IDからインデックスを決めて,arr()に入れていって,最後にそれでグループ化
これなら同じ名前のやつでもいけるような気がする。
たくさん図形はあるけど名前は三種類 Shp1 Shp2 Shp3 のみ。
名前でグループ化は大変ですが,みた感じできてるぽいです。
これをもっと,スマートにやれば,インデックスわからない問題なんとかならないかなー
気になったから一気にどたばた書きましたが,寝ないと ε≡≡ヘ( ´Д`)ノ