1

У меня есть документ, полный полей слияния, которые используются для отображения информации из электронной таблицы. Иногда мы хотим, чтобы эти данные заполнялись вручную, поэтому мы должны напечатать документ без этих полей.

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

1 ответ1

1

В Word нет возможности сделать поля слияния пустыми. Есть только Alt+F9, но это все еще оставляет вас с «Fieldname» вместо пробелов.

Так что вам нужно сделать это с помощью макроса. Вы можете использовать макрос ниже. Если вы не сохраните документ после выполнения, вы можете вернуться к сохраненному файлу (с полями слияния) после печати. Конечно, вы также можете изменить этот макрос, чтобы создать файл копии, выполнить этот код, распечатать и закрыть копию (вместе с одним макросом). Вы можете изменить ______ на пробел, если вы хотите, чтобы вместо поля подчеркивания на месте для заполнения формы вручную использовались настоящие пробелы.

Sub Demo()
Dim oFld As Field
For Each oFld In ActiveDocument.Fields
  With oFld
    If .Type = wdFieldMergeField Then
      .Code.Text = "QUOTE " & Chr(34) & "______" & Chr(34)
      .Update
      .Unlink
    End If
  End With
Next
End Sub

Редактировать:

Как вы и просили здесь пример, где исходный файл сначала сохраняется, затем "добавляется" в новый документ, поля слияния удаляются, документ печатается и снова закрывается. (все сразу, с некоторыми комментариями)
Если вы уверены, что документ не был изменен, вы можете пропустить .Save -линии. Но затем, если вы внесли изменения без сохранения, ваша распечатанная копия будет сохранена, а не текущий файл.

Прошло много времени с тех пор, как я закодировал в VBA, но я думаю, что это работает;)

Sub PrintCopyWithoutMergeFields()
  Dim oFld As Field

  ' save the original, needs to be done to add it as copy
  ActiveDocument.Save

  ' copy the original to a new document
  Application.Documents.Add ActiveDocument.FullName

  ' loop through all the fields and delete mergefields
  For Each oFld In ActiveDocument.Fields
    With oFld
      If .Type = wdFieldMergeField Then
        .Code.Text = "QUOTE " & Chr(34) & "______" & Chr(34)
        .Update
        .Unlink
      End If
    End With
  Next

  ' print the copy with the print-dialog
  Dialogs(wdDialogFilePrint).Show

  ' if you don't want the print-dialog, use this for the default printer
  ' Application.PrintOut

  ' close the copy without asking to save
  ActiveDocument.Close False

End Sub

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