Powerpoint VBA 数式を書く ⑤ 参照設定不要版
あんまり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を陰で開いている最初のタイミングでもっさりするのは避けられませんね・・(ΦωΦ)
参照設定をあてにしないように書いたので,汎用性は広がったかな。