我正在寻找帮助,为Word 2013创建一个简单的宏,用于检查用户是否正在打印多份副本并取消打印作业。
一些解决方案,例如:
显然强制1自动会更好,但可能更复杂。我想只是一个提示+取消打印作业将是最简单的,然后用户可以返回并更改为打印1份。
推理:
我有一个打印带有递增编号的文档的宏,但是如果你选择说打印2份,然后宏询问“多少份”,你说2,你就得到4份文件。
2x Doc # 1
2x Doc # 2
我需要用户始终在Word Print屏幕中选择1份,然后在宏提示框中选择#份。
如何执行此操作?
答案 0 :(得分:0)
一种解决方案是关闭所有打印按钮和命令(禁用菜单 - 例如CommandBars("Standard").Items(ID:=XX).Enabled = False
,其中XX是打印和快速打印选项的ID),然后只允许自定义打印宏调用打印功能。您还必须禁用功能区打印按钮和热键(OnKey
命令“^ p”),您也可以将其重定向到宏。
答案 1 :(得分:0)
所以我的解决方案涉及ActiveDocument.PrintOut
中的一个标志,它指定了副本Copies:=1
。这进入了打印文档的宏,并在DocumentBeforePrint
我使用Cancel = True
内部。
这允许用户在Word中选择他们想要的任何数字并将其汇集到Cancel = True
,然后宏询问您想要多少份?"并打印每次递增数量的X份数。不知怎的,以前,即使宏将采用word中设置的副本数量并将其应用于宏中,因此我会得到同一个序列号文档的副本,这不是我想要的。
我看到用户在Word和Macro MsgBox中都放了相同的数字,但实际上他们可以在Word中放置任何内容,而且重要的只是宏MsgBox。
最后两段代码片段如下所示:
Public WithEvents App As Word.Application
Private Sub App_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
'Cancel = True = Don't bother printing whatever was selected in Word Print Page
Cancel = True
Call FilePrint
End Sub
模块:
Sub FilePrint()
Dim i As Long, j As Long
With ActiveDocument
j = CLng(InputBox("How many copies to print?", "Print Copies"))
For i = 1 To j
With .CustomDocumentProperties("Counter")
.Value = .Value + 1
End With
.Fields.Update
' Added Copies:=1 to force no Duplicates!
ActiveDocument.PrintOut Copies:=1
Next
.Save
End With
End Sub