用VBA重命名单词样式

用VBA重命名单词样式,vba,ms-word,Vba,Ms Word,我有一批已经格式化的文件(WinWord),我希望在任何地方都使用相同的名称进行逻辑匹配样式 有没有办法通过VBA重命名许多WinWord 2007样式,或者只能手动重命名 谢谢你花时间思考我的问题。 Marcel您应该能够通过写入用户定义样式的NameLocal属性来更改其名称。例如: ActiveDocument.Styles(3).NameLocal = "abbracadabra" 将“样式”集合中第三个样式的名称更改为“abbracadabra”。具体如何实现自动化取决于名称更改是否

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

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

谢谢你花时间思考我的问题。
Marcel

您应该能够通过写入用户定义样式的NameLocal属性来更改其名称。例如:

ActiveDocument.Styles(3).NameLocal = "abbracadabra"
将“样式”集合中第三个样式的名称更改为“abbracadabra”。具体如何实现自动化取决于名称更改是否有逻辑

我认为这对内置样式(如标题1)不起作用;相反,您会得到一个别名样式。在Word 2010中,它看起来像“[旧样式名称],[新样式名称]”。我对这些不太了解

因此,例如,如果您想在每个样式名称后面添加“-changed”,可以执行以下操作:

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

您应该能够通过写入用户定义样式的NameLocal属性来更改其名称。例如:

ActiveDocument.Styles(3).NameLocal = "abbracadabra"
将“样式”集合中第三个样式的名称更改为“abbracadabra”。具体如何实现自动化取决于名称更改是否有逻辑

我认为这对内置样式(如标题1)不起作用;相反,您会得到一个别名样式。在Word 2010中,它看起来像“[旧样式名称],[新样式名称]”。我对这些不太了解

因此,例如,如果您想在每个样式名称后面添加“-changed”,可以执行以下操作:

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

有一个关于如何重命名链接样式的重要说明。在通过样式本身的
NameLocal
重命名样式时,我意外地发现了这个技巧:重命名还更改了样式的字符格式。对于链接样式,应使用重命名样式的
LinkStyle
NameLocal
。下面是重命名这两种类型样式的完整函数<代码>调试用于查看重命名了哪些样式以及如何重命名

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

有一个关于如何重命名链接样式的重要说明。在通过样式本身的
NameLocal
重命名样式时,我意外地发现了这个技巧:重命名还更改了样式的字符格式。对于链接样式,应使用重命名样式的
LinkStyle
NameLocal
。下面是重命名这两种类型样式的完整函数<代码>调试用于查看重命名了哪些样式以及如何重命名

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
非常感谢,克里斯蒂娜:-)实际上,你可以用同样的方式“重命名”内置样式。正如您已经指出的,内置名称保持不变,并且正在添加别名。如果您不知道样式在样式集合中的位置,可以这样写:
ActiveDocument.styles(“原始样式名称”).NameLocal=“New style Name”
非常感谢,Christina:-)实际上,您可以用同样的方式“重命名”内置样式。正如您已经指出的,内置名称保持不变,并且正在添加别名。如果不知道样式在样式集合中的位置,可以编写:
ActiveDocument.styles(“原始样式名称”).NameLocal=“新样式名称”