Powerpoint VBAを使おう!

Powerpoint VBAやExcelのVBAで遊んでいます。Word VBAも始めました。

だいぶ書き出せました。

明後日からは仕事がはじまるので,暇な時間ももう少し。

紙のノートのいろいろなところに書いていた内容をだいぶここに書きだせました。

ちょっと細かいことを,ここでは書きます。Powerpointは記録マクロがないので,忘れたときあたふたするので。。

スライド●のジャンプは次のように書きます。

SlideShowWindows(1).View.GotoSlide ●

同じスライドでも,スライドショー中と,編集中では親オブジェクトがいろいろあるのがPowerpoint VBAのむずかしいとこですよね・・

ActivePresentation.Slides (●)からいくやつ
ActiveWindowからいくやつ
SlideShowWindows(1)からいくやつ

大変大変。

たまに使う,マクロの実行を図形に設定するやつです。

Sub test()
    With ActiveWindow.Selection.ShapeRange.ActionSettings(ppMouseClick)
        .Action = ppActionRunMacro
        .Run = "マクロ名"
    End With
End Sub

これを実行してあげると,選んでいる図形すべてのマウスクリック時のマクロを設定できます。楽です。
オブジェクト名やテキストを取得して動作を変えるようにしておけば,同じマクロ名を複数の図形に適用できますので,
わたしはめんどくさくなってきたら,こんなマクロでやってます。 Selectionの後のShapeRangeをよく忘れて怒られますね(ΦωΦ)

前のエントリで,ウィンドウ状態でスライドショーすることを書きましたが,あれもマクロで設定できます。

    ActivePresentation.SlideShowSettings.ShowType = ppShowTypeWindow

こんな感じです。自動プレゼンテーションにして,スライド移動を禁止するという手をとることもあります。
多肢選択式クイズとか作るときにやったなぁ。その場合は ppShowTypeKiosk を設定します。


あとは,Excelの時とかなり違って混乱するのが,テキストの扱い方でした。階層が深い(;´▽`A``
図形のテキストは

    activepresentation.Slides().Shapes("▲▲▲").TextFrame.TextRange.Text

こんな感じです。textがデフォルトプロパティのようなので,最後のTextは省略可能
これの注意はとにかく,図形の名前を先に自分で書き直しておくこと。勝手に決められた名前はかなりやっかいです。vbaで制御しようと思う図形は名前を変えておくべきですし,
コードで生成する図形の場合はオブジェクト変数に入れてから操作するか,つくったらすぐ名前をnameプロパティで自分好みに書き直すことをわたしは勧めます。

表のテキストも取り込めます。クイズ問題とかを収納したり結果を表に書き出したりとけっこうわたしも使いました。

    ActivePresentation.Slides().Shapes("▲▲▲").Table.Cell(,).Shape.TextFrame.TextRange.Text

これもとにかく階層が深い。CellsじゃなくCellなところも注意。Cellの後のShapeとかもよく忘れて怒られます。。
使うときはTableまでをオブジェクトに放り込んでおくとけっこうすっきり使えたりします。

    Dim TTable as Table
    Set TTable=ActivePresentation.Slides().Shapes("▲▲▲").Table
    TTable.なんとか・・

Withで囲ったりもいいですよね。わたしは不得意なのでオブジェクト変数に放り込んで使うことがおおいです。

わたしは,オブジェクトのイメージがつかめると,かなりのものを制御できはじめました。
なので,今思いつくだけ,最初つまづいたところを書き出しておきました。