パワポVBAの覚え書きという役立たないことを願うライフハック集 【再投稿】

昨日はちょっとヒートアップしのたので、今日は緩いネタを書きましょう
ということで、とりあえず、パワポのオートシェイプの触り方とか書きましょうか。
いや、パワロで仕様書を描く(誤字じゃなくて)お仕事を手作業でやるのが辛くてですね。

さて。
根っこの部分のプレゼンテーションファイルを触るところはエクセルとほぼ同じActivePresentationとThisPresentationが使えます。Presentationsコレクションもどっかに有ると思いますけど、ちょっと未確認です。
メインで使ってたのは、ActiveWindowのSelectionオブジェクトです。今触ってるやつを掴んでいます。ここからアクセスしたいものに合わせて、SlideRange、ShapeRange、TextRangeなどのオブジェクトを参照します。
このぴよぴよRangeってのは、ざっくりとした説明だと、ポインタみたいな感じで実体とは違います。(Slide変数でSlideRangeオブジェクトは掴めない)
が、まあ、実体みたいに参照出来たり、変更出来たりするので、変数にぶち込む時以外はあんまり気にしなくて良いような気がします。

ここでちょっと軽く構造をまとめます。
PresentationはSlideコレクション(Slides)を持っています。
SlideオブジェクトはShapeコレクション(Shapes)を持っています。
Shapeオブジェクトはテキストボックスを持っているものと持っていないものがあって、持っているものはTextFrameオブジェクトを参照出来ます。持っているかどうかはなんかのプロパティで見れます。Visual Studioさんに聞いてください。
TextFrameオブジェクトが持っているテキストを参照するにはTextFrameオブジェクトのTextRangeを参照します。
書式に触るなら、TextRangeオブジェクトのfontオブジェクトを叩きます。
ShapeオブジェクトのTypeプロパティで、どんなオートシェイプなのかが分かります。定数はまとめてる人が居たので手を抜きます。(エクセルのみたいですけど、多分大丈夫でしょう)
スライド上の位置とかは、名前見れば分かるようなプロパティで参照出来ます。Visual Studioさんに(ry

これだけあれば、わりと結構色々出来そうですが、ちょっと厄介なものもあります。

まずは、複数のオートシェイプを選択しているとき。
このときActiveWindow.Selection.ShapeRengeはコレクションです。っていうか、一つしか選択して無くてもコレクションです。

具体的に何のコレクションかは良く把握してませんが、VariantオブジェクトでFor Eachぶん回せば、なんかShapeっぽく扱えました。それで十分だと思います。気になる人はMSDN見ると良いと思います。

あともう一個、オートシェイプのタイプの一つのテーブルです。これが非常に厄介です。
参照する場合は、ShapeRangeからTableオブジェクトにアクセスします。これにCellsというメソッドがあるので、なんかエクセルのセルっぽく参照していって、さらにShapeRangeオブジェクトを掴むと、セル一つ一つにアクセス出来ます。選択しているかどうかを見れるプロパティがあるので、選択しているセルだけ書式を適用するといったことが出来ます。
単純に全部のセルにアクセスするなら、子要素全部をFor Eachでぶん回すとかでいけた気がします。

で、問題はセルの文字列の一部を選択しているときに、その文字列のフォントを変えたいとき。
直接ActiveWindow.Selection.TextRangeで触りに行く→エラー。
TableオブジェクトのCellsから触りに行く→文字一つ一つについて選択状態か調べる方法がよく分からない。
ということで、私は諦めました。
だいたい、テーブル作るのに、罫線ツールバー使うとか、パワポのテーブル触りたくないです。本当に。

はい、そんな感じで、覚え書きでした。