Powerpoint VBA 数式を書く④ オートコレクト部分の改善
もうすぐAM3:30 一日中何やってんだか(;´▽`A``
休みならではのこだわりとして,あきらめよう。
数式関連,ちらつきを抑えるために,WordのOMathを使うことをやはり考えました。コレデイコウ。
はまった理由が情けない話でしたが,なんとか見れるものになったので,動きを載せます。
ちらつかないです!
というか,けっこう早い段階である程度のところまで来ていて,√ の処理ができないことにものすごく悩んでいました。
問題点が違っただけで,全く違うところを悩んでいた。
とりあえずコードを載せます。表示していないWordを終了させるタイミング等は今度考える。
標準モジュール
Option Explicit Public WDDocument As Word.Document Sub test() Dim WDApp As Word.Application Set WDApp = New Word.Application 'WDApp.Visible = True Set WDDocument = WDApp.Documents.Add ActivePresentation.SlideShowSettings.Run SlideShowWindows(1).View.PointerType = ppSlideShowPointerArrow End Sub
Slide 1 のモジュール
Option Explicit Private Sub TextBox1_Change() Dim WDRange As Word.Range Set WDRange = WDDocument.Range WDRange.Text = Replace(TextBox1.Text, "\sqrt ", "√") Call WDDocument.OMaths.Add(WDRange) Dim MathObj As Word.OMath Set MathObj = WDDocument.OMaths(1) WDDocument.OMaths(1).BuildUp WDRange.Copy Slide1.Shapes("数式").TextFrame.TextRange.Paste End Sub
ActiveX のTextBox1 が必要です。また,数式 という名前のテキストボックスが必要です。そこに表示する仕組みにしています。
数式の仕組みを理解してなかったようです。
¥マーク(\マーク)で始まる特殊な言葉 ルートなら \sqrt とかです。
これをオートコレクトの機能で特定のUNICODEの文字に変換して,それをトリガーとして数学文字等を表現します。
その部分を補助してあげないと,OMathのBuildUpをしたところで,きちんと変換されないという仕組みがあったんですね。
そこをすっとばして,ずっと \sqrt が勝手に変わらない なぜだ!?とずいぶん長い時間悩んでいたのでまったく進みませんでした。
つまり分数とかはずいぶん前から動いていたのに,Wordオブジェクトのもってき方が悪いと勘違いして悶々と間違い続けていたようです。。
とりあえず√は描けるようにしたのが上のコード。
他にも使うものがあれば,一つずつ実装しないといけない。
http://unicode.org/notes/tn28/UTN28-PlainTextMath-v2.pdf#search=%27Unicode+Nearly+PlainText+Encoding+of+Mathematics%27
ここから,特殊文字のUNICODEは取れるので,必要なものだけ実装すればいいかな。私が使うものなどたいしたことないし。
ちょっとこれも乗り越えたかな。期待できる手段になるかなーと思います(ΦωΦ)
問題は裏でWordが開く間待たないといけないことくらいかな・・・(;´▽`A``
Officeの数式の扱いのためには,入力方法を踏襲するべきですが,教材等には簡易記法を実装するほうがいいよなぁ ルートは r でいいとか。