Word 2007 vba - стили не применяются с помощью макроса - PullRequest
2 голосов
/ 28 июля 2010

У меня есть макрос-код, который в основном создает несколько таблиц, затем вводит некоторый текст в некоторых из них, а затем помещает несколько текстовых заполнителей. Проблема появляется, когда я пытаюсь применить стили к тексту. Сначала я подумал, что код не влияет только на заполнители. Но кажется, что обычный текст, выделенный макросом, также не применяется.

Код в основном выглядит следующим образом:

Selection.TypeText Text:="Entreprisecost:"
Selection.MoveRight Unit:=wdCell
Set cc = Selection.Range.ContentControls.Add(wdContentControlText)
cc.SetPlaceholderText Text:="Description of the cost"
cc.DefaultTextStyle = "EnterpriseStyle"
Selection.Style = ActiveDocument.Styles("EnterpriseStyle")

Обратите внимание, как я определяю стиль как для заполнителя, так и для выделения.

Далее я попытался записать простой макрос, в котором я выделяю всю строку, а затем применяю стиль к выделению. Это работает, когда я записываю. Но это не работает, когда я запускаю макрос. Странно:

Selection.MoveUp Unit:=wdLine, Count:=5, Extend:=wdExtend
Selection.Style = ActiveDocument.Styles("ExperienceStyle")

Почему это происходит? В моих настройках безопасности макросов задано значение по умолчанию, но я, конечно, решил включить макросы после открытия шаблона. Это происходит, когда я открываю сам шаблон и когда дважды щелкаю его, чтобы создать новый документ на основе шаблона. Есть идеи?

Редактировать: каждый бит макроса работает, кроме применения стилей. Код, который применяет стиль, запускается, текст не меняется. И когда я выбираю текст, чтобы проверить, в каком стиле он находится, я вижу, что стиль применяется. Но это не в то же время. Странно, если я выделю текст, а затем вручную повторно применю стиль, то есть, нажимая на тот же стиль, который уже выбран, ТОГДА я вижу, что стиль действительно применяется.

Как будто стиль устанавливается без его фактического применения.

Ответы [ 2 ]

2 голосов
/ 29 июля 2010

Во-первых, вы должны помочь нам с кодом и настройкой.Я предполагаю, что у вас есть как минимум таблица 6 на 2 с выбором в ячейке 6,1 (внизу, слева).Во-вторых, не заставляйте нас угадывать, что это за переменные;используйте тусклые высказывания.В-третьих, у нас нет ваших стилей, поэтому я изменил их на стандартные Normal.dot.

С учетом сказанного ваш код работает нормально, как показано ниже.Единственная неправильная вещь, которую я вижу, это то, что вы использовали ExperienceStyle в последней части и EnterpriseStyle в первой части.Вы получите сообщение об ошибке, если один из них не существует.

Public Sub Test()
    Selection.TypeText Text:="Entreprisecost:"
    Selection.MoveRight Unit:=wdCell

    Dim cc As ContentControl
    Set cc = Selection.Range.ContentControls.Add(wdContentControlText)
    cc.SetPlaceholderText Text:="Description of the cost"
    cc.DefaultTextStyle = "Title"
    Selection.Style = ActiveDocument.Styles("Title")
    Selection.Style = ActiveDocument.Styles("Strong") 'Proof the style is being changed.

    Selection.MoveUp Unit:=wdLine, Count:=5, Extend:=wdExtend
    Selection.Style = ActiveDocument.Styles("Strong")
End Sub
1 голос
/ 30 марта 2015

Я думаю, что ваша проблема в том, что вы не очищаете формат перед применением нового стиля.Попробуйте сделать это и скажите нам, если это работает

...