Powerpoint VBA ActiveX Commandボタンをマクロで挿入する。
短いですが,少しPowerpointのVBA触ってて,知らない内容だったので書き残す。
初心者備忘録 様 の Powerpoint自動実行マクロ のところを見てて,
クラスモジュールを動かさなくてもいくつかのイベントが使える,という点でとても興味があります。
https://www.ka-net.org/blog/?p=2340
他のイベントも動いてくれた方が都合がよいので,きちんと整えようと思いつつ,他のこともあるので少しずつ。
下記のような記述がありました。
また、スライドショーの実行時やページ変更時にマクロを実行したいときに便利な「OnSlideShowPageChange」マクロですが、
ppsやppsmといったマクロが有効なスライドショー形式のファイルを実行した場合には処理が実行されません。
こういったときはスライド上に適当なActiveXコントロール(コマンド ボタン等)を追加することでマクロが実行されるようになります。
私は,スライドショーの形で利用することもけっこう多いので,ここは由々しき問題。。
そのあたりも含め,いろんなことを解決した形のPowerpointの自分用のテンプレートを準備してみようと思い始めました。
(Excelのように,最初からイベントが起動してくれれば何も問題ないのに!!)
と同時に,そういうテンプレートに相当するものをVBSで作るところまでもっていく予定。。・・・未定ですが。
ActiveXコントロールの挿入ってExcelだと マクロ記録でいとも簡単に見つかるのに,相変わらずPowerpointでは少し違って困ります。
ローカルウィンドウでボタンをActiveXのボタンを調べてたら,msoOLEControlObjectってでるんですよね。
適当にコード補完に頼って触ってたら,それっぽいのがわかりました。
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
これで
いろいろでました 一部しかのせてません。
reg query HKEY_LOCAL_MACHINE\Software\Classes | findstr \.Application | more
Application系も見れるようですね。( ..)φメモメモ
computer-technology.hateblo.jp
コマンドプロンプトの分はこちらのページを参考にさせてもらいました。