2

Я хочу создать шаблон Word 2010 для моей команды, который гарантирует, что каждая страница содержит нижний колонтитул со следующей информацией:

  • Кто последний сохранил файл
  • Когда файл был последний раз сохранен
  • Путь и имя файла, где хранится файл

Итак, я создал файл шаблона (dotx) с нижним колонтитулом, который содержит следующие коды полей:

  • {LASTSAVEDBY * Caps * MERGEFORMAT}
  • {SAVEDATE \@ "d MMM yyy" * MERGEFORMAT}
  • {FILENAME -p}

Однако, когда я сохраняю этот шаблон и создаю новый документ (затем сохраняю его), поля не обновляются. LASTSAVEDBY отображается пустым, SAVEDATE показывает 0 XXX 0000, а FILENAME показывает Document1.

Я также попытался сохранить это как шаблон dotm на случай, если есть какие-то скрытые макросы, но результаты совпадают.

1 ответ1

5

Поэтому, читая статью Microsoft KnowledegeBase по этому вопросу, вы получите исчерпывающий ответ, что это сделано специально , поэтому для этого вам нужно написать макрос. Удобно они предоставляют Макрос, который обновляет поля при открытии файла, а не сохраняет. На самом деле это имеет больше смысла для ряда полей, поэтому, пока вы используете LASTSAVEDBY и SAVEDATE, они будут иметь смысл.

Просто помните, что вы не увидите примененные обновления, пока не откроете документ снова. Для нижних колонтитулов это абсолютно нормально.

А поскольку это макрос, вам определенно нужно сохранить его как dotm.

Для тех, кому нужно обновить поля при сохранении, есть обсуждение на форумах VBA Express, или вы можете просто адаптировать макрос из документа Microsoft.

Обновление vbscript от Microsoft - это хорошо, но в результате получается документ, который всегда думает, что он был отредактирован, поэтому всегда предлагает сохранить при закрытии. Большинство пользователей всегда будут нажимать на это, что приведет к значениям LASTSAVEDBY и SAVEDATE, показывающим, когда документ был последний раз прочитан, и кем.

Поэтому я добавил строку, чтобы сразу пометить документ как неизмененный после обновления полей. Любое дальнейшее редактирование документа сбрасывает это, давая подсказку сохранения при закрытии.

Вот код макроса:

Sub AutoOpen()
'
' AutoOpen Macro
'
'
   Dim aStory As Range
   Dim aField As Field

   For Each aStory In ActiveDocument.StoryRanges

      For Each aField In aStory.Fields
         aField.Update
      Next aField

   Next aStory

 ' set document as unchanged (prevents save dialog popping up when closing)
 ' further edits will set this back to false and restore 
 ' the save dialog on close
 ActiveDocument.Saved = True
End Sub

Обновление Приведенный выше код работает нормально, если вы не сохраните его в своем шаблоне Normal.dotm, и в этом случае он запускается каждый раз, когда вы открываете какой-либо документ. Если документ открыт в режиме защищенного просмотра (т. Е. Он был загружен из Интернета или был вложен в электронное письмо), ActiveDocument недоступен. Решение состоит в том, чтобы проверить, что документ не находится в режиме защищенного просмотра, прежде чем запускать функции внутри макроса. Вот обновленный код макроса, включая оператор If для проверки того, что документ не находится в защищенном режиме:

Sub AutoOpen()
    '
    ' AutoOpen Macro
    '
    '
       Dim aStory As Range
       Dim aField As Field

    ' Check that document is not in Protected View before doing anything
    If Application.ActiveProtectedViewWindow Is Nothing Then

           For Each aStory In ActiveDocument.StoryRanges

              For Each aField In aStory.Fields
                 aField.Update
              Next aField

           Next aStory

         ' set document as unchanged (prevents save dialog popping up when
         'closing) - further changes will set this back
         ActiveDocument.Saved = True
    End If
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .