1

我有一批已经格式化的文件(WinWord),我想在任何地方使用相同的名称来进行逻辑匹配的样式。

有没有办法通过 VBA 重命名许多 WinWord 2007 样式,或者只能手动完成?

感谢您花时间思考我的问题。马塞尔

4

2 回答 2

1

关于如何重命名链接样式有一个重要说明。通过样式本身重命名样式时,我偶然发现了这个技巧NameLocal:重命名也改变了样式的字符格式。对于链接样式,应该使用被重命名NameLocalLinkStyle样式的 。这是重命名这两种类型的样式的完整功能。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
于 2016-03-20T20:14:51.490 回答
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
于 2013-03-14T22:27:59.643 回答