• ベストアンサー

Word VBAで、数式かどうかを判定する方法

OS:Win XP Word VBAで、選択文字列がオブジェクトの「Microsoft 数式 3.0」で作成した数式 かどうかを判定する方法が分からず困っています。 分かる方いましたらご教授下さい。 処理は、Word2007のVBAで、一文字づつ選択して判定を行っています。 最終的には、数式だったら、別のワードデータを新規に作り、 そこにコピペして保存する所までをやりたいと考えています。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

以下のような方法で「Microsoft 数式 3.0」を 取得できます。オブジェクトとして取得しています。 Dim i As Integer Dim strType As String For i = 1 To ActiveDocument.InlineShapes.Count strType = ActiveDocument.InlineShapes.Item(i).OLEFormat.ClassType If ActiveDocument.InlineShapes.Item(i).OLEFormat.ClassType = "Equation.3" Then '何か実行 End If Next

VBScriptingMan
質問者

お礼

ありがとうございます。 教えていただいた方法でうまくできそうです。 ただ、例外的に画像化された数式があった場合、 「オブジェクト変数またはwithブロック変数が設定されていません。」と エラーが出てしまいました。 流れからして、Typeが"Equation.3"と判断される数式画像が存在することになります。 明確に画像以外と条件分岐を入れてテストをすればよいのかもしれませんが、 明日は、祝日で手元で作業できません。 もし、ご推察されることがありましたら、コメントをいただけると嬉しいです。 木曜日にテストしてみます。 取り急ぎ、ありがとうございました。

VBScriptingMan
質問者

補足

画像以外と条件をつけてから、Typeが"Equation.3"だったら、という条件を追加したらうまく処理できました。 どうも数式が画像化されたものがあった場合スルーしてしまったようです。 これで上手くいきまいた。 有難うございます。

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

残念ながら「Microsoft 数式 3.0」で作成した数式は テキストで抜き出せないので、該当する数式を目視 出来るようにする方法として、画像を大きくする方法で 確認するというのはどうでしょうか。大きくして そのまま閉じても元にもどるので確認してみてください。 Sub Test5() Dim i As Integer Dim AHeight As Integer Dim CHeight As Integer Dim CWidth As Integer AHeight = 30 'この数値で高さ調節 For i = 1 To ActiveDocument.InlineShapes.Count If ActiveDocument.InlineShapes.Item(i).OLEFormat.ClassType = "Equation.3" Then CHeight = ActiveDocument.InlineShapes.Item(i).Height ActiveDocument.InlineShapes.Item(i).Height = AHeight CWidth = ActiveDocument.InlineShapes.Item(i).Width ActiveDocument.InlineShapes.Item(i).Width = CWidth * AHeight / CHeight End If Next End Sub なお、「Microsoft 数式 3.0」に関するCommandを調べてみましたが 不明なものもありますが、以下を http://msdn.microsoft.com/en-us/library/ff529789%28office.12%29.aspx Equationで検索するとかなり出てきますが、質問にマッチする ものはどうも無いようです。

VBScriptingMan
質問者

お礼

情報源を教えていただき有難うございます。 Wordは奥が深いですね。 参考にさせていただきます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

strType = ActiveDocument.InlineShapes.Item(i).OLEFormat.ClassType というのはこの場合は使っていないので コメントアウトするか削除してください。

関連するQ&A