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

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

PowerpointのActiveXのテキストボックスについて

パワーポイントのVBAに自信がついてきたころに,同僚から質問されて,困惑したことがあったのを思い出しました。

ActiveXのテキストボックスの扱いです。
困惑しましたし,デザインの幅が狭いですし,こんなの・・と思わなくもないですが,とても面白い挙動もあります。
触れておこうと思います。

f:id:chemiphys:20170102222056p:plain
私がいつも使うテキストボックスは,挿入メニューからいれれるやつです。
図形の中のもですし,リボンの中にもテキストボックスがいますね。または,単に図形を描いた後でもテキストは扱ってくれます。
自由度は高いし,デザインもいろいろ凝れます。とても使い勝手がいい。

こちらは

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

で扱える方です。

それとは別のテキストボックスがあります。ActiveXのやつのほう。開発タブのコントロールのところにいます。
f:id:chemiphys:20170102222512p:plain
似てますが,全く異なるものです。ただ,すごい面白いところもあります。

まず,ActiveXコントロールをスライドに挿入すると,プロジェクトエクスプローラーにそのスライドが出現します。
f:id:chemiphys:20170102223219p:plain
Activexコントロールの指定方法はいつものテキストボックスとは全然違って,Slide1がクラスモジュール扱いみたいで,
Slide1モジュールの中では,

Private Sub AX_txt_Change()
    Me.Shapes("txt").TextFrame.TextRange.Text = AX_txt.Text
End Sub

こんなふうに書ける。 txt が通常のテキストボックス, AX_txtがActiveXのテキストボックスにつけた名前です。
Meというのはスライド1のことです。ここ限定ではありますが,簡略化して書けますね。あと,ActiveXのテキストボックスは名指しで簡単に書けてるところも全然違う。
標準モジュールからAX_txtにアクセスするには,『Slide1.AX_txt』みたいな感じでいけるようになってます。
f:id:chemiphys:20170102224506p:plain
メンバなども表示されてくるので,使いやすい面はあります。扱い方が違うと認識していれば,むしろ便利なものですね。

ActiveXのテキストボックスにはイベントが発生しています。前準備無しで,テキストボックスに関するイベントはもう有効になってるので,
さっきのコードを書くと,スライドショー中こんな感じ。
f:id:chemiphys:20170102223811g:plain
テキストボックスのChangeイベントを使ってスライドショー中に文字の入力を利用できます。Inputboxじゃなくて済む。
どんどん反映されていきますし,ボタンの文字を変更して,その文字を利用したマクロを実行するよう作ることもできます。
わたしは,タイマーマクロで,時間の自由入力ボタンにこのことを利用しています。

あと,Slide1のモジュールはクラスモジュールみたいであることを利用して,全体のイベント発生をそこに書けるようです。

Public WithEvents App As Application

Public Sub スタート()
    Set App = PowerPoint.Application
End Sub

以前書いたエントリより,少し手間がはぶけてます。上記『スタート』を実行しないとイベント認識始まりませんけどね(゚▽゚*)

このことは,こちらの記事に書いてあります。

初心者備忘録さん [PowerPoint]Applicationオブジェクトのイベントを利用する
www.ka-net.org

こちらのブログもいつも勉強させてもらっているところです。

テキストボックスにはいくつかあって,アクセス方法が全然違うんだというのは気づいたら簡単ですが,最初は動揺しましたので,そのメモでした。