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

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

Powerpoint VBA 数式を書く ⑤ 参照設定不要版

chemiphys.hateblo.jp

あんまりWordの参照設定しているひといないよなーということで,そこの配慮が足りなかった。
あと,標準モジュールで最初にしていることはたいしてないので,そこを外すように設計してみる。
私の目的としては,ルートさえ表示できればいいレベルなんですが,興味に負けて 複数行の数式が書けるように,片側括弧まではいけるまでには変更してみました。
Wordが開かれたらけっこうさくさく動きますし,Officeの数式の練習にも悪くない感じです(ΦωΦ)
アニメーションGIFでまぁまぁスムーズに見れるように何度も入力をやりなおしてたら,数式少し上手になってきました(゚▽゚*)

Slide1のコード ※追記 BeforeCloseイベントを利用して,Wordを閉じさせるように修正 コードが通常文になってたりいろいろミスってました

Option Explicit
'Dim WDApp As Word.Application
Dim WDApp As Object
'Dim WDDocument As Word.Document
Dim WDDocument As Object
Private WithEvents PPTApp As PowerPoint.Application

Private Sub PPTApp_PresentationBeforeClose(ByVal Pres As Presentation, Cancel As Boolean)
    WDDocument.Saved = True
    WDApp.Quit
End Sub

Private Sub TextBox1_Change()

    If WDDocument Is Nothing Then
        Set PPTApp = Application
        
        'Set WDApp = New Word.Application
        Set WDApp = CreateObject("Word.Application")
        
        WDApp.Visible = True
        Set WDDocument = WDApp.Documents.Add
    End If
    
    'Dim WDRange As Word.Range
    Dim WDRange As Object
    
    Set WDRange = WDDocument.Range
    Dim tmpString As String
    'オートコレクトの代わりをここで-------------------------------------------------
    tmpString = TextBox1.Text
    tmpString = Replace(tmpString, "\sqrt ", "√")
    tmpString = Replace(tmpString, "\close", ChrW(CLng("&H" & "2524"))) 'U+2524
    tmpString = Replace(tmpString, "\eqarray", ChrW(CLng("&H" & "2588")))  'U+2588
    '-------------------------------------------------------------------------------
    
    WDRange.Text = tmpString

    Call WDDocument.OMaths.Add(WDRange)
    
    'Dim MathObj As Word.OMath
    Dim MathObj As Object
    
    Set MathObj = WDDocument.OMaths(1)
    WDDocument.OMaths(1).BuildUp
    WDRange.Copy
    Slide1.Shapes("数式").TextFrame.TextRange.Paste
End Sub

ここまでいけば,意外に使えるよなぁと思ってます。

Word解放に関しては,パワーポイントのイベントを使うことがやっぱり妥当なんでしょうね。。この記事書いている途中でthomさんがコメントをくださっているのをちらっと見ました。

そこらへんも苦手分野ですが,苦手分野だからこそ,取り組んではみないとですね(゚▽゚*)

Powerpointもデフォルトでイベントに対応してればいいのになぁ。

Wordが背後でたまるので,visible=trueにしておきました。手動でとりあえず消してください(;´▽`A``

もう一回記事書いて,そこでは対応しておきます。
※追記 BeforeCloseイベントを追加してみました。これでWordは閉じてくれるはず。何らかの問題で閉じれないこともあるかもなので,WordのVisibleはTrueにしています。

どうしてもWordを陰で開いている最初のタイミングでもっさりするのは避けられませんね・・(ΦωΦ)

参照設定をあてにしないように書いたので,汎用性は広がったかな。
f:id:chemiphys:20170219113310g:plain