0

ドキュメントで選択されているものに特定のスタイルを適用するマクロを作成しました。ただし、下書きビューで、ユーザーがスタイル エリア ペインをクリックして段落を選択し、Ctrl キーを押しながら追加の段落をクリックすると、この追加の選択は、このマクロの実行時に適用されません。

Sub BodyTextApply()
    Selection.Style = ActiveDocument.Styles("Body Text,bt")
End Sub

これに何を追加する必要がありますか? 注: ユーザーがドキュメント内の実際のテキストを選択するようにワークフローを変更することはできません。スタイルエリアペインを使用して設定されています...

ワークフローは次のとおりです。

代替テキスト http://img6.imageshack.us/img6/1994/91231840.png

(望ましくない)出力は次のとおりです。

代替テキスト http://img34.imageshack.us/img34/1239/outputt.png

4

1 に答える 1

4

スタイル「Body Text、bt」は純粋な段落スタイルのようです。つまり、完全な段落にのみ適用されます。

ただし、スクリーンショットでは、2 番目の段落の一部しか選択されていません。段落全体が選択されていることを確認するか、スタイルを段落の一部にのみ適用する必要がある場合は、スタイル "Body Text,bt" をリンクされた (段落と文字) スタイルにします。

不連続な選択へのプログラムによるアクセスは非常に制限されており、そのような選択は Word UI を使用してのみ作成できます。MSDN の記事、Word の不連続な選択への制限付きのプログラムによるアクセスには、さらに詳細が記載されています。

段落の一部のみにスタイルを適用する (リンクされたスタイルにする) ことが望ましくない場合は、おそらく次のようなハックを考え出す必要があります。

Sub BodyTextApply()

    Dim oRange As Range

    ' create a temporary character style
    ActiveDocument.Styles.Add "_TEMP_STYLE_", wdStyleTypeCharacter

    ' apply the temporary style to the discontiguous selection
    Selection.Style = ActiveDocument.Styles("_TEMP_STYLE_")

    Set oRange = ActiveDocument.Range

    With oRange.Find
        .ClearAllFuzzyOptions
        .ClearFormatting
        .ClearHitHighlight
        .Style = ActiveDocument.Styles("_TEMP_STYLE_")
        .Text = ""
        .Wrap = wdFindStop

        ' search for all occurences of the temporary style and format the
        ' complete paraphraph with the desired style
        Do While .Execute
            oRange.Paragraphs(1).Style = ActiveDocument.Styles("Body Text,bt")
        Loop

    End With

    ' cleanup
    ActiveDocument.Styles("_TEMP_STYLE_").Delete

End Sub

使用されている一時的なスタイルが最終的にドキュメントから削除されるように、エラー処理も追加する必要があります。

于 2009-08-17T21:33:12.177 に答える