2017-04-06 8 views
0

選択したテキスト内に任意の文字スタイルが割り当てられているかどうかを調べる簡単で普遍的な方法はありますか? は現在、私は、関数を使用していますが、それはMS Wordの言語バージョンに依存しないではありません。Word VBA:選択範囲内に文字スタイルが割り当てられていますか?

Function AnyCharacterStyleAssigned() 
    'elicit the name of the default paragraph font 
    V_AppLang = Application.Language 
    If V_AppLang = 1031 Then 
     Vst_Default = "Absatz-Standardschriftart" 
    ElseIf V_AppLang = 1045 Then 
     Vst_Default = "Domy" & ChrW(347) & "lna czcionka akapitu" 
    ElseIf V_AppLan = 1033 Then 
     Vst_Default = "Default Paragraph Font" 
    Else 
     MsgBox prompt:="this script doesn't work for this language version of Word", Buttons:=vbOKOnly 
     End 
    End If 

    'search for the default paragraph font within the selection range 
    Set R_Range = Selection.Range 
    R_Range.Find.ClearFormatting 
    R_Range.Find.Style = Vst_Default 
    R_Range.Find.Execute findtext:="", Forward:=True, Wrap:=wdFindStop, Format:=True 
    AnyCharacterStyleAssigned = IIf(R_Range.Start >= Selection.End, False, True) 
End Function 
+0

私はあなたの質問をどうするか分からない。 1つは、私はWinWordへのあなたの参照によって驚いています。私はVBAとWinWordとの間の接続や、WinWordにVBAがあるかどうかはわかりません。私はMS WordとそのVBAについていくつかの知識を持っています。 MS Wordでは、文字スタイルが割り当てられていないテキストはありません。したがって、より合理的な質問は、それがどちらかであろう。デフォルトの文字スタイルはwdStyleNormalです。これは任意のフォントを持つことができ、どのフォントかを尋ねることができます。最後に、おそらくあなたは "Default Paragraph font"を読んでみてください。 – Variatus

答えて

0

より良いテストは以下になります。あなたが持っているコードでは、選択肢にスタイルがない場合、選択は決して変更されないので、常にTrueの場合があります。

Public Sub StyleTest() 
    Dim R_Range As Range 
    Set R_Range = Selection.Range 
    R_Range.Find.ClearFormatting 
    R_Range.Find.Style = "Strong" 

    Dim AnyCharacterStyleAssigned As Boolean 
    AnyCharacterStyleAssigned = False 
    If R_Range.Find.Execute(Forward:=True, Wrap:=wdFindStop, Format:=True) = True Then 
     R_Range.Select 
     AnyCharacterStyleAssigned = True 
    End If 
End Sub 
関連する問題