Вопрос по header, vba, field, word-2010 – Вставка текста и полей в заголовок Word 2010 без использования .Select

2

Я пытаюсь исправить заголовок страницы Word 2010, содержащий поля для имени файла, даты сохранения и номера страницы, а также текст между ними, например, так: filename + " "+ сохранить дату + вкладка + номер страницы. Тем не менее, я могуКажется, что струны на своих местах. То, что у меня так далеко, это:

Sub CreateHeader()
    Dim myRange As Range
    With ActiveDocument
        Set myRange = .Sections(1).Headers(wdHeaderFooterPrimary).Range
        .Fields.Add Range:=myRange, Type:=wdFieldFileName, PreserveFormatting:=True
        myRange.Collapse wdCollapseEnd
        myRange.InsertAfter (" ")
        myRange.Collapse wdCollapseEnd
        .Fields.Add Range:=myRange, Type:=wdFieldSaveDate, Text:="\@ YYYY-MM-DD", PreserveFormatting:=True
        myRange.InsertAfter (Chr(9))
        myRange.Collapse wdCollapseEnd
        .Fields.Add Range:=myRange, Type:=wdFieldPage, PreserveFormatting:=True
    End With
End Sub

Тем не менее, после выполнения саба, разные части не были, где я намерен. Вместо этого они отображаются как имя файла + " "+ вкладка + номер страницы + дата сохранения. Что я здесь не так делаю? Если это вообще возможно, я бы предпочел не прибегать к..Select

(Обратите внимание, что я недавно спросилпохожий вопрос.)

Ваш Ответ

1   ответ
2

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

Во-первых, вы хотите свернуть до конца после каждой вставки, но вам также нужно переопределить диапазон заголовков (myRange переменная) в заголовок после вставки SaveDate.

Это'Это немного уродливо, но следующий код, кажется, делает то, что вы хотите. Обратите внимание, что если я непоставить последнийwdCollapseEnd в коде это нет работа.

Наконец-то я'обновите ваши поля в конце, просто чтобы вы неЯ должен сделать это вручную.

Sub CreateHeader()
    Dim myRange As Range
    With ActiveDocument
        Set myRange = .Sections(1).Headers(wdHeaderFooterPrimary).Range
        .Fields.Add Range:=myRange, Type:=wdFieldFileName, PreserveFormatting:=True
        myRange.Collapse wdCollapseEnd
        myRange.InsertAfter (" ")
        myRange.Collapse wdCollapseEnd
        .Fields.Add Range:=myRange, Type:=wdFieldSaveDate, Text:="\@ YYYY-MM-DD", PreserveFormatting:=True
       Set myRange = .Sections(1).Headers(wdHeaderFooterPrimary).Range
       myRange.Collapse wdCollapseEnd
       myRange.InsertAfter (Chr(9))
       myRange.Collapse wdCollapseEnd
       .Fields.Add Range:=myRange, Type:=wdFieldPage, PreserveFormatting:=True
       myRange.Fields.Update
End With

End Sub

Большое спасибо, @CuberChase. Очень полезный ответ. Fredrik P
Никаких проблем, Word может делать непредсказуемые вещи при работе с ним, вот так:почти стоит сломать его и проверить его шаг за шагом. :) CuberChase
@CuberChase, кажется, это отличное решение, но у меня возникла проблема, когда выполнение подобных действий, похоже, отключает уже существующую нумерацию страниц в нижнем колонтитуле. Я представил детали здесь, если естьЕсть ли шанс, что вы могли бы взглянуть.stackoverflow.com/questions/51866047/...  Спасибо большое! Mike

Похожие вопросы