Как вставить код поля PRINTDATE в предложение, используя Word VBA? - PullRequest
0 голосов
/ 03 января 2019

Я бы хотел добавить следующее предложение в свой документ: «Последний раз этот документ был напечатан 01.01.2009 2:10». Дата и время должны быть динамическими. Прямо сейчас у меня есть только эта часть:

Element.Range.Text = "This document was last printed on "

Работает, но отсутствует часть даты. Что я должен сделать, чтобы объединить поле PRINTDATE в это предложение?

Я пытался

Selection.Fields.Add Range:=.Footers(wdHeaderFooterPrimary).Range, Type:=wdFieldPrintDate, Text:="\@""DD MMM YYYY""", preserveformatting:=True 

и это работает, но переписывает весь нижний колонтитул, как я могу добавить его к тексту, чтобы он был похож на мой пример?

Ответы [ 3 ]

0 голосов
/ 03 января 2019

Чтобы получить доступ к нижнему колонтитулу, связанному с выделением:

Dim rng as Word.Range
Set rng = Selection.Sections(1).Footers(wdHeaderFooterPrimary).Range

К этому добавить к этому диапазону:

rng.InsertAfter " This document was last printed on " 'don't forget a space at the beginning
rng.Collapse wdCollapseEnd 'so the inserted field comes AFTER
rng.Fields.Add Range:=rng,  Type:=wdFieldPrintDate, _
    Text:="\@""DD MMM YYYY""", preserveformatting:=False

Примечание: я настоятельно рекомендую использовать PreserveFormatting:=False, так как в этом поле больше шансов получить форматирование окружающего текста, если применяется другое форматирование. Установка этого значения на True сохранит исходное примененное форматирование для количества символов , первоначально указанного в поле . Если поле обновлено и число символов изменяется, некоторые символы могут быть отформатированы иначе, чем остальные.

Действительно, я предпочитаю использовать метод более следующим образом, со всем содержимым поля в параметре Text, включая переключатель CharFormat. CharFormat заставит заставить все поле использовать форматирование символов, примененное к первому символу в коде поля - гораздо надежнее:

rng.Fields.Add Range:=rng,  Type:=wdFieldEmpty, _
    Text:="PrintDate \@""DD MMM YYYY"" \* CharFormat", preserveformatting:=False
0 голосов
/ 03 января 2019

Попробуйте:

With ActiveDocument
  .Fields.Add Range:=Selection.Sections.First.Footers(wdHeaderFooterPrimary).Range.Characters.Last, _
    Type:=wdFieldEmpty, Text:="PRINTDATE \@""'This document was last printed on 'DD MMM YYYY""", PreserveFormatting:=False
End With
0 голосов
/ 03 января 2019

Приведенный ниже код изменит все нижние колонтитулы в документе так, чтобы они отображали: «Последний раз документ был напечатан на {dd.mm.yyyy}. Возможно, он изменен, чтобы не заменить весь нижний колонтитул.

Sub ModifyFooter()
    ' 03 Jan 2019

    Dim Doc As Document
    Dim Txt As String
    Dim Foot As HeaderFooter
    Dim Para As Paragraph
    Dim Rng As Range
    Dim i As WdHeaderFooterIndex

    Set Doc = ActiveDocument
    For i = wdHeaderFooterPrimary To wdHeaderFooterFirstPage
        Set Foot = Doc.Sections(1).Footers(i)
        Txt = "This document was last printed on "
        Set Para = Foot.Range.Paragraphs(1)
        Set Rng = Para.Range
        With Rng
            .Text = Txt
            .Collapse wdCollapseEnd
        End With
        Txt = "\@ ""dd.MM.yyyy"""
        Doc.Fields.Add Rng, wdFieldPrintDate, Text:=Txt, PreserveFormatting:=True
    Next i
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...