Powerpoint VBAを使おう!

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

Powerpoint VBA 数式を書く④ オートコレクト部分の改善

chemiphys.hateblo.jp

もうすぐAM3:30 一日中何やってんだか(;´▽`A``

休みならではのこだわりとして,あきらめよう。

数式関連,ちらつきを抑えるために,WordのOMathを使うことをやはり考えました。コレデイコウ。

はまった理由が情けない話でしたが,なんとか見れるものになったので,動きを載せます。

f:id:chemiphys:20170219032352g:plain

ちらつかないです!

というか,けっこう早い段階である程度のところまで来ていて,√ の処理ができないことにものすごく悩んでいました。

問題点が違っただけで,全く違うところを悩んでいた。

とりあえずコードを載せます。表示していない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 でいいとか。