2009-08-16 12 views
0

ドキュメントで選択されているものに特定のスタイルを適用するマクロを作成しました。スタイルエリアペインでユーザーがクリック段落を選択し、次にCtrlキー+は、追加の段落をクリックしたときにドラフトビューで、この追加の選択を適用しない場合ただし、このマクロが実行されます。VBAを使用してWordで複数の選択肢にスタイルを適用するにはどうすればよいですか?

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

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

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

alt text http://img6.imageshack.us/img6/1994/91231840.png

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

alt text http://img34.imageshack.us/img34/1239/outputt.png

+1

Word 2007で正常に動作しますか? – RBarryYoung

答えて

2

ルックスをあなたのスタイル "Body Text、bt"は純粋な段落スタイルです。つまり、完全な段落にのみ適用されます。

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

不連続な選択へのプログラムによるアクセスは非常に限定されており、そのような選択はWord UIを使用してのみ作成できます。 MSDNの記事Limited programmatic access to Word discontiguous selectionsにはいくつかの詳細があります。

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

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 

エラー処理を追加して、使用された一時的なスタイルが最終的に文書から削除されていることを確認してください。

関連する問題