0

目次に表示されるように、vba を使用してテキスト行にワード スタイルを適用しようとしています。問題の行に含まれるスタイルを維持するのに問題がありますが、何らかの理由でドキュメント全体がスタイルを取得しています。

With Selection
.TypeText Text:=headername                 ' This is defined previously,
.HomeKey Unit:=wdLine, Extend:=wdMove   ' This is to move the cursor to the start of the line
.Expand wdLine                           ' This is to select the whole line
.Style = "Heading 2"                     ' this is to define the style of the selected text
.EndKey Unit:=wdLine, Extend:=wdMove      ' This is to unhighlight the text
.InsertBreak Type:=wdLineBreak            ' This is to create a line break    
 End With

ただし、何らかの理由で、ドキュメント全体がスタイルとして「見出し 2」を採用しています。私はこれを行うために無数の他の方法を試しましたが、運が悪く、

誰かがこれを行うためのより良い方法を知っていますか、または私が間違っている場所を見ていますか?

ありがとう

4

1 に答える 1

6

テキスト行だけに段落スタイルを適用することはできません。段落に適用する必要があります。シナリオの場合のように、段落が 1 行しか占めない場合もありますが、違いを認識することが重要です。

コードの問題は、アクションを実行する順序が与えられているため、ブレークを挿入すると、スタイルの書式設定が取得され、それが引き継がれることです。

現在の Selection ではなく、Word の RANGE オブジェクトを使用する方が、はるかに効率的で明確です。Selection を開始点として使用できますが、それ以降は、コードはより予測可能な Range に依存する必要があります (また、ユーザーは物事が「飛び回る」ことはありません)。例えば:

Dim rng as Word.Range
Set rng = Selection.Range
rng.Text = headername & vbCr 'Insert the new para at same time
Set rng = rng.Paragraphs(1).Range 'Only the first para
rng.Style = Word.WdBuiltinStyle.wdStyleHeading2 'language independent
rng.Collapse Word.WdCollapseDirection.wdCollapseEnd 
'focus in new para, which has different formatting
于 2015-11-30T16:10:11.520 に答える