none
word2010 vbaで数式オブジェクトを選択する方法 RRS feed

  • 質問

  • word2010の文書にmathtypeという数式作成ソフト(なおワード添付の数式作成ソフトではありません)で作成したオブジェクトが埋め込まれています.
    埋め込まれている部分をフィールド表示すると
    { EMBED Equation.DSMT4} 
    です.

    VBAで複数ある数式オブジェクトを順に選択しある処理をしたいのですが,順に選択する方法がわかりません.
    ワードのVBAではどういう名前のオブジェクトとして指定すればいいのでしょうか.エクセルvbaの場合はavtivesheet.oleobjects(1)で指定できるようですが,ワードvbaの場合はactivedocument.oleobjects(1)などは機能しません.
    VBAで処理したい内容がフィールドコード{ EMBED Equation.DSMT4}のままでは処理できませんので,フィールドコードを表示させてその文字列{ EMBED Equation.DSMT4}を検索するという方法以外でお願いします.


    宜しくお願いします.


    2017年1月17日 3:37

回答

すべての返信

  • Sub SelectAllEquations()
        Dim objEq As OMath
        ActiveDocument.DeleteAllEditableRanges wdEditorEveryone
        For Each objEq In ActiveDocument.OMaths
            objEq.Range.Paragraphs(1).Range.Editors.Add wdEditorEveryone
        Next
        ActiveDocument.SelectAllEditableRanges wdEditorEveryone
        ActiveDocument.DeleteAllEditableRanges wdEditorEveryone
    End Sub
    

    すみません。Word 2013で確認したのですが上記のようなコードで数式オブジェクトの選択ができました。

    参考サイト: https://www.extendoffice.com/documents/word/751-word-select-equation.html

    2017年1月17日 4:44
  • 検索しただけですが、以下が参考になりませんでしょうか?

    WordのVBAにてコントロール名に変数を使いたい
    https://oshiete.goo.ne.jp/qa/4590875.html

    Word 2010だと以下のリファレンスがあります。

    OLEFormat Object (Word)
    https://msdn.microsoft.com/en-us/library/office/ff838741(v=office.14).aspx

    Word 2013以降ですと、機械翻訳になりますが、日本語のページがあります。

    OLEFormat オブジェクト (Word)
    https://msdn.microsoft.com/ja-jp/library/office/ff838741.aspx


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク matushiro97 2017年1月17日 14:49
    2017年1月17日 4:45
    モデレータ
  • 有難うございます.

    このオブジェクトは紛らわしいのですが2007からバンドルされた標準添付の数式エディタのオブジェクトでして,今回の質問のオブジェクトではありません.

    私が利用しているのはそれ以前に標準添付されていた「数式エディタ」の高機能市販版のmathtypeというソフトです(標準添付の数式エディタは使いにくいし見かけが不恰好なので使用していません.)

    mathtpeが作成する埋め込みブジェクトを選択する方法を探しています.


    2017年1月17日 14:40
  • 有難うございました。

    まさしく".OLEFormat.ClassType"が私が探していた機能です。これで解決しました。

    次のようなコードです。

    ***************************

    Sub MathTypeEqnSearchReplace()
        Dim shapeNum As Long
        Dim eqn As InlineShape    
        shapeNum = ActiveDocument.InlineShapes.Count
        For i = 1 To shapeNum
            Set eqn = ActiveDocument.InlineShapes(i)
            If eqn.OLEFormat.ClassType = "Equation.DSMT4" Then
                 eqn.Select
                Call MTCommand_TexToggle
                Stop 'ここで置換処理
                Call MTCommand_TexToggle
            End If
        Next
    End Sub




    2017年1月17日 14:49