2013-03-04 100 views
1

我有一批已經格式化的文件(WinWord),並且我想使用相同的名稱來在任何地方進行邏輯上匹配的樣式。使用VBA重命名Word樣式

是否有任何方法通過VBA重命名許多WinWord 2007樣式,或者只能手動完成此操作?

感謝您花時間思考我的問題。 Marcel

回答

0

您應該可以通過寫入其NameLocal屬性來更改用戶定義樣式的名稱。例如:

ActiveDocument.Styles(3).NameLocal = "abbracadabra" 

將Styles集合中第三個樣式的名稱更改爲「abbracadabra」。具體如何自動化這取決於名稱更改是否存在邏輯。

我不認爲這將適用於內置樣式(如標題1);相反,你會得到別名風格。在Word 2010中,最終看起來像「[舊風格名稱],[新風格名稱]」。我對這些並不瞭解。

所以,如果你想,例如,添加「-changed」每一個風格的名字,你可以做到以下幾點:

For Each aStyle in ActiveDocument.Styles 
    If aStyle.BuiltIn = False Then aStyle.NameLocal = aStyle.NameLocal & "-changed" 
Next aStyle 
+0

非常感謝,克里斯蒂娜:-) 實際上,你可以在「重命名」內置樣式相同的方式。正如您已經指出的那樣,內置名稱將保留並且正在添加別名。 如果您不知道樣式在樣式集合中的位置,您可以編寫: 'ActiveDocument.Styles(「Original Style Name」)。NameLocal =「New Style Name」 – Marcel 2013-03-19 17:57:17

1

有關於如何重命名鏈接風格的重要注意事項。當通過樣式本身的NameLocal重命名樣式時,我意外地發現了這個技巧:重命名也改變了樣式的字符格式。對於鏈接的樣式,應使用重命名樣式的LinkStyleNameLocal。這是一個完整的函數來重命名這兩種類型的樣式。 Debug用於查看哪些樣式以及樣式是如何重命名的。

Function rename_style(ByVal p_Styles As Styles, ByVal From_n As String, ByVal to_n As String) As Boolean 
    Dim v_Style As Style 
    On Error Resume Next 
    Set v_Style = p_Styles(From_n) 
    If Not v_Style Is Nothing Then 
    If v_Style.Linked Then 
     v_Style.LinkStyle.NameLocal = to_n 
    Else 
     v_Style.NameLocal = to_n 
    End If 
    Set v_Style = p_Styles(From_n) 
    'Accessing through p_Styles to avoid the use of the localized name 
    If v_Style Is Nothing Then 
     Debug.Print From_n; " -> "; to_n; " failed" 
     rename_style = False 
    Else 
     Debug.Print From_n; " -> "; to_n 
     rename_style = True 
    End If 
    Else 
    rename_style = False 
    Debug.Print From_n; " skipped" 
    End If 
End Function