Как я могу увеличить поле формы каждый раз при печати документа? - PullRequest
2 голосов
/ 04 апреля 2011

Я знаю кого-то, у кого есть одностраничный документ MS Word для квитанций.Один заголовок включает RECEIPT #<number>.В данный момент он проверяет, какой номер был на последней распечатанной квитанции, и вручную настраивает номер квитанции на этот номер плюс один, прежде чем распечатать одну копию документа.

Я подумал, что это можно улучшить,используя поле формы, содержащее число, которое затем увеличивается на единицу каждый раз при печати документа.Я не нашел ничего поддерживаемого MS Word из коробки, но я думаю, что это можно сделать с помощью VBA.Много лет назад мне приходилось программировать на этом языке, и я никогда ничего не делал с полями формы в Word и событиями печати. ​​

Может кто-нибудь указать мне правильное направление с помощью некоторого примера кода, который может это сделать?Автоматическое сохранение документа после корректировки номера также приветствуется.

1 Ответ

2 голосов
/ 18 августа 2011

Word позволяет управлять событием DocumentBeforePrint, которое, я думаю, даст вам нужный вам результат. После добавления поля текстовой формы в сам документ добавьте этот код в раздел объявлений ThisDocument VBA:

Option Explicit
Private WithEvents app As Application

Затем отредактируйте подпрограмму Document_Open () следующим образом:

Private Sub Document_Open()
Set app = Application
ActiveDocument.Variables("ReceiptNumber").Value = ActiveDocument.FormFields(1).Result
End Sub

Наконец, создайте подпрограмму DocumentBeforePrint со следующим кодом:

Private Sub app_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)

Dialogs(wdDialogFilePrint).Show

With ActiveDocument
    .Variables("ReceiptNumber").Value = .Variables("ReceiptNumber").Value + 1
    .FormFields(1).Result = .Variables("ReceiptNumber").Value
    .Save
End With

Cancel = True

End Sub

Этот код откроет диалоговое окно «Печать» и после печати увеличит счетчик и сохранит документ. Строка Cancel = True отменяет стандартное диалоговое окно «Печать», поэтому код не пытается напечатать документ дважды. (Можно также увеличить счетчик после печати, удалив Dialogs(wdDialogFilePrint).Show и Cancel = True.)

Я думаю, что стоит упомянуть, что, как только код введен в действие, настройте этот процесс, дважды щелкнув в поле формы документа (поле, которое будет содержать номер квитанции) и выберите «Число» для типа поля и введите первый номер квитанции, который должен быть напечатан как «Номер по умолчанию».

enter image description here

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

...