読者です 読者をやめる 読者になる 読者になる

Powerpoint VBAを使おう!

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

Powerpointで数式を書く③ わかってきたよ!

Powerpoint VBA

前回の記事でコマンドボタンをVBAで呼び出すと,勝手にスライドショーが閉じてしまう問題は,imihitoさんからのアドバイスを適用すればクリアできそうな気がしました。

DocumentWindowの扱いが初めてなので,二つ以上プレゼンテーションを開いている場合どうなるのか,という対策はまだできていませんが,とりあえずそれは別の問題としておきましょう。
ざっとみた感じ

Windows(1).Presentation.Name

で名前が取れるので,それでなんとかすればいいのかな。。

さて,本題。

ざくっと数式をテキストボックスのテキスト全体に適用したり,テキストボックスから作りだしたりという大雑把なところをクリアしてきたので,細かい部分を確認しているところです。

できれば,既存のテキストを数式に変えるような柔軟さがほしいわけです。

実は
f:id:chemiphys:20170218114927p:plain
このエラーが出たり出なかったりするのがなぜかわからず悩んでいたんですが,

なんとなくわかりました。

テキストには,数式の状態なのかそうでないかという属性がどうもあります。MathZoneで選べたりするのでその状態があるのは間違いないですね。

それを切り替える手段が今のところ私には,該当部分をSelectしておいての
  Application.CommandBars.ExecuteMso ("InsertBuildingBlocksEquationsGallery")
これしかありません。これはトグルスイッチとなっている(表現が微妙ですみません)ので,
実行のたびに 数式⇔普通のテキスト の切り替えが行われます。
(普通のテキストに戻す時は数式のテキストの一部ではなく,全部が選ばれている必要があるようです。)

このことから,通常のテキストも数式に切り替えれることがわかりました。

そして,テキストの属性が数式の状態になっているときに,
  Application.CommandBars.ExecuteMso ("EquationProfessional")
こちらを実行すると,数式に変えます。

あとは,テキストボックス中の文字の扱いが上達すれば上達するほど自由に制御できそうです。

イミディエイトウィンドウ上の記述のまま書きますが,
  ?activewindow.Selection.ShapeRange.TextFrame2.TextRange.MathZones(2).Start
  ?activewindow.Selection.ShapeRange.TextFrame2.TextRange.MathZones(2).length
これで数式の位置が取れますね。

  ?activewindow.Selection.TextRange.Start
選んでいるテキストのスタート位置がわかります。

ちょっと組み合わせれば,いくつめのMathZoneに属しているか簡単にわかりそう。
前回の記事に追記しましたが,
  activewindow.Selection.ShapeRange.TextFrame2.TextRange.MathZones(2).Select
どのmathZoneに属しているかわかれば,選ぶことも簡単ですね。

テキストボックスでは文字数もいいと思いますが,Linesという便利なプロパティもあるようです。
activewindow.Selection.ShapeRange.TextFrame.TextRange.Lines(3).InsertAfter chr(10) &"(2\sqrt 5)/2"
たとえばこのようにして,3行目の後に改行とテキストを入れて行を増やすことも簡単ぽい。

うん,
  Application.CommandBars.ExecuteMso ("EquationProfessional")
これを実行するタイミングで,きちんと想定通りの数式が選ばれているか,そこさえきっちりおさえれば,かなり自由に数式が書けますね。

さて,あとは比較さえ想定通りにできれば,これは極めて実用的ぽいなぁ。

数式自身の書き方も覚えないと自由に書けないので,最低限の備忘録

分数は   2/(3+4)<スペース>みたいな感じ。括弧をうまく組み合わせましょう。
ルートを書くときは   \sqrt<スペース>
左下付き/上付き文字は  _a^b<スペース>x<スペース>
べき乗根は   \sqrt(5&a^2)<スペース>
support.office.com

複数の数式を同時にかくやつなんかすごいですね。今まで軽視していましたが,制御できるようになってきた今,これは覚えるべきものだなぁ。

テキスト⇔数式の行き来ができるようになったので,ボタン等をうまく使って数式を書けるように作れたりするのかなー(;´▽`A``
f:id:chemiphys:20170218124659g:plain
イミディエイトウィンドウから制御している様子です。