2017-04-06 71 views
0

是否有任何簡單而通用的方法來確定是否在選定的文本中分配了任何字符樣式? 目前我使用的功能,但它並不是獨立的微軟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

我不知道該怎麼做你的問題。首先,我對你參考WinWord感到吃驚。我不知道VBA和WinWord之間有任何聯繫,或者WinWord中是否有VBA。我對MS Word及其VBA有一些瞭解。在MS Word中,沒有任何文字未被分配任何字體樣式。因此,一個更合理的問題是它是哪一個。默認字符樣式是wdStyleNormal,它可以有任何字體,你可以問它是哪一個。最後,也許你應該閱讀「默認段落字體」 - 另一個看似沒有聯繫的主題。 – Variatus

回答

0

一個更好的測試將是如下。你有的代碼,如果選擇沒有風格,選擇永遠不會改變,所以你將永遠有一個真實的案例。

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 
相關問題