如何在每次打印文档时增加表单字段?

时间:2011-04-03 21:28:27

标签: forms vba ms-word counter word-vba

我认识一个有收据的单页MS Word文档的人。 一个标题包括RECEIPT #<number>。目前,他在最后打印的收据上查找了哪个号码,并在打印出单个文件副本之前手动调整收据编号为该号码加一。

我认为可以通过使用一个包含数字的表单字段来改进,然后在每次打印文档时将其增加1。我没有找到MS Word开箱即用的任何支持,但我认为可以使用VBA完成。几年前我不得不用这种语言编程,而且我从未对Word和打印事件中的表单字段做过任何事情。

有人能用一些可以做到这一点的示例代码指出我正确的方向吗?调整数量后自动保存文件也是受欢迎的。

1 个答案:

答案 0 :(得分:2)

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).ShowCancel = True,也可以在打印后递增计数器。)

我认为值得一提的是,一旦代码到位,双击文档的表单字段(包含收据编号的字段)并选择字段类型的“数字”并输入需要打印的第一个收据编号为“默认编号”。

enter image description here

输入表单字段的默认值后,手动保存文档然后将其关闭。现在,每次打开时,表单字段的内容都将分配给变量,DocumentBeforePrint事件将在每次打印文档时递增字段。如果用户需要重置字段(由于打印机卡塞或其他一些无法预料的事件),他应该双击该字段,更改默认值,在对话框中单击“确定”,保存文档并关闭它(以清除超出先前为计数器变量指定的值)。和以前一样,打开文档会使其准备好进行打印和递增。希望这会有所帮助。