2013-03-04 50 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