2013-03-04 14 views
1

У меня есть пакет файлов (WinWord), которые уже отформатированы, и я хочу использовать те же имена для логически совпадающих стилей.переименование стилей Word с VBA

Есть ли способ переименовать несколько стилей WinWord 2007 через VBA или это можно сделать только вручную?

Спасибо, что нашли время, чтобы подумать о моем вопросе. Marcel

ответ

0

Вы должны иметь возможность изменять имена пользовательских стилей, записывая их свойства NameLocal. Например:

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

меняет название третьего стиля в коллекции стилей для «abbracadabra». Точно как вы автоматизируете это, зависит от того, есть ли логика для изменения имени.

Я не думаю, что это будет работать для встроенных стилей (например, для заголовка 1); вместо этого вы получаете стиль с псевдонимом. В Word 2010 это выглядит как «[имя старого стиля], [новое имя стиля]». Я не очень много знаю об этом.

Итак, если вы хотите, например, добавить «-Изменен» к имени каждого стиля вы можете сделать следующее:

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

Большое спасибо, Кристина :-) на самом деле, вы можете «переименовать» встроенные стили одинаково. Как вы уже указали, встроенное имя остается и добавляется псевдоним. Если вы не знаете положение стиля в коллекции стилей, вы можете написать: 'ActiveDocument.Styles (« Оригинальное имя стиля »). NameLocal =« Новое имя стиля »' – Marcel

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 
Смежные вопросы