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

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

Powerpoint VBA ActiveX Commandボタンをマクロで挿入する。

短いですが,少しPowerpointVBA触ってて,知らない内容だったので書き残す。

初心者備忘録 様 の Powerpoint自動実行マクロ のところを見てて,
クラスモジュールを動かさなくてもいくつかのイベントが使える,という点でとても興味があります。

https://www.ka-net.org/blog/?p=2340

他のイベントも動いてくれた方が都合がよいので,きちんと整えようと思いつつ,他のこともあるので少しずつ。

下記のような記述がありました。

また、スライドショーの実行時やページ変更時にマクロを実行したいときに便利な「OnSlideShowPageChange」マクロですが、

ppsやppsmといったマクロが有効なスライドショー形式のファイルを実行した場合には処理が実行されません。

こういったときはスライド上に適当なActiveXコントロール(コマンド ボタン等)を追加することでマクロが実行されるようになります。

私は,スライドショーの形で利用することもけっこう多いので,ここは由々しき問題。。

そのあたりも含め,いろんなことを解決した形のPowerpointの自分用のテンプレートを準備してみようと思い始めました。


(Excelのように,最初からイベントが起動してくれれば何も問題ないのに!!)

と同時に,そういうテンプレートに相当するものをVBSで作るところまでもっていく予定。。・・・未定ですが。

ActiveXコントロールの挿入ってExcelだと マクロ記録でいとも簡単に見つかるのに,相変わらずPowerpointでは少し違って困ります。

ローカルウィンドウでボタンをActiveXのボタンを調べてたら,msoOLEControlObjectってでるんですよね。

f:id:chemiphys:20180924011650p:plain

適当にコード補完に頼って触ってたら,それっぽいのがわかりました。

Shapes.AddOLEObject Method (PowerPoint) | Microsoft Docs


ClassNameのところがよく把握できませんが,ちょうどいい例がありましたので,それに従って下記のコードにたどり着いた。( ´ー`)

Sub test()
    Dim sld As Slide: Set sld = Slide1
    Dim CmdButton As Shape
    Set CmdButton = sld.Shapes.AddOLEObject(Left:=0, Top:=-100, Width:=250, Height:=50, ClassName:="Forms.CommandButton.1")
    CmdButton.OLEFormat.Object.Caption = "イベント発生のためのダミーボタン"
End Sub


これで,とりあえずスライドショー形式でも OnSlideShowPageChange マクロが動くものが作れるかなぁ。

地味にボタンのCaptionの場所を探すのに時間がかかりました。。もっとさくさく目的のものが探せるようになりたい(;´▽`A``

ローカルウィンドウ内を検索できる機能がほしいですね。

追記
ClassNameの一覧は見つからなかったんですが,Wordの記録マクロである程度わかりそうでした。
Wordで記録したコードではこんな感じに出ます。

Sub Macro1()
'
' Macro1 Macro
'
'
    Selection.Range.ContentControls.Add (wdContentControlRichText)
    Selection.TypeParagraph
    ActiveWindow.View.ShowXMLMarkup = wdToggle
    ActiveDocument.ToggleFormsDesign
    Selection.InlineShapes.AddOLEControl ClassType:="Forms.CheckBox.1"
    Selection.TypeParagraph
    Selection.InlineShapes.AddOLEControl ClassType:="Forms.CommandButton.1"
    Selection.TypeParagraph
    Selection.InlineShapes.AddOLEControl ClassType:="Forms.ListBox.1"
    Selection.TypeParagraph
End Sub

これは助かる。
コマンドプロンプトでもいくらか見れるらしい
reg query HKEY_LOCAL_MACHINE\Software\Classes | findstr .Forms | more

これで
f:id:chemiphys:20180924014630p:plain

いろいろでました 一部しかのせてません。

reg query HKEY_LOCAL_MACHINE\Software\Classes | findstr \.Application | more

Application系も見れるようですね。( ..)φメモメモ

computer-technology.hateblo.jp

コマンドプロンプトの分はこちらのページを参考にさせてもらいました。