我认识一个有收据的单页MS Word文档的人。
一个标题包括RECEIPT #<number>
。目前,他在最后打印的收据上查找了哪个号码,并在打印出单个文件副本之前手动调整收据编号为该号码加一。
我认为可以通过使用一个包含数字的表单字段来改进,然后在每次打印文档时将其增加1。我没有找到MS Word开箱即用的任何支持,但我认为可以使用VBA完成。几年前我不得不用这种语言编程,而且我从未对Word和打印事件中的表单字段做过任何事情。
有人能用一些可以做到这一点的示例代码指出我正确的方向吗?调整数量后自动保存文件也是受欢迎的。
答案 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).Show
和Cancel = True
,也可以在打印后递增计数器。)
我认为值得一提的是,一旦代码到位,双击文档的表单字段(包含收据编号的字段)并选择字段类型的“数字”并输入需要打印的第一个收据编号为“默认编号”。
输入表单字段的默认值后,手动保存文档然后将其关闭。现在,每次打开时,表单字段的内容都将分配给变量,DocumentBeforePrint事件将在每次打印文档时递增字段。如果用户需要重置字段(由于打印机卡塞或其他一些无法预料的事件),他应该双击该字段,更改默认值,在对话框中单击“确定”,保存文档并关闭它(以清除超出先前为计数器变量指定的值)。和以前一样,打开文档会使其准备好进行打印和递增。希望这会有所帮助。