docxファイルには、数学オブジェクト(mml)の特定の表記を含むテキストがたくさんあります。これらの表記法は、特定の区切り文字(MATHSTARTとMATHEND)で囲まれています。書式なしのテキストを置換するVBA
例:
MATHSTART<math xmlns="http://www.w3.org/1998/Math/MathML" display="block" alttext="x equals StartFraction negative b plus-or-minus StartRoot b squared minus 4 a c EndRoot Over 2 a EndFraction">
<semantics>
<mrow>
<mi>x</mi>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow>
<mo>−<!-- − --></mo>
<mi>b</mi>
<mo>±<!-- ± --></mo>
<mrow class="MJX-TeXAtom-ORD">
<msqrt>
<msup>
<mi>b</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>−<!-- − --></mo>
<mn>4</mn>
<mi>a</mi>
<mi>c</mi>
</msqrt>
</mrow>
</mrow>
<mrow>
<mn>2</mn>
<mi>a</mi>
</mrow>
</mfrac>
</mrow>
</mrow>
<annotation encoding="application/x-tex">x={-b\pm {\sqrt {b^{2}-4ac}} \over 2a}</annotation>
</semantics>
</math>MATHEND
私は今、すべてのこれらの部品をフェッチして、区切り文字(演算スタートとMATHEND)せずにもう一度戻ってそれらを入れて、文書からそれらをカットするためにマルコスを使用したい
とフォーマットなし(wdFormatPlainText
のようなもの)。望ましい結果は、docxの数式です。私はこれまで持って何
:
Dim regex As Object, wholeDocText As String
Set regex = CreateObject("VBScript.RegExp")
Selection.WholeStory
Selection.Copy
wholeDocText = Selection.Text
With regex
.Pattern = "MATHSTART[.\s\S]*?MATHEND"
.Global = True
End With
Set matches = regex.Execute(wholeDocText)
For Each match In matches
s1 = Replace(match.Value, "MATHSTART", "")
s1 = Replace(s1, "MATHEND", "")
'select match.Value in the document
'overwrite the selected string with the new one
'sth like: Selection.Text s1(wdFormatPlainText)
Next match
問題は、私が実装する方法がわからないコメントの三行、です。
単にコメントコードの代わりに 'match = s1'を書くだけですか? – Vityata
@Vityataは単に変数の値を変更するだけですが、書式設定なしで上書きされるようにドキュメントのテキスト部分をマークするスクリプトが必要です。 – kPeach