检查打印份数或阻止打印的宏,除非通过宏

Macro that checks how many copies are printed or blocks printing except by macro

我正在寻求帮助,为 Word 2013 创建一个简单的宏,检查用户是否正在打印超过 1 份并取消打印作业。

一些解决方案如:

显然自动强制 1 会更好,但可能更复杂。我认为只是提示 + 取消打印作业是最简单的,然后用户可以返回并更改为打印 1 份。

推理:

我有一个用递增数字打印文档的宏,但是如果你 select 说打印 2 份,那么宏会询问 "How many copies" 而你说 2,你会得到 4 个文档。

2x Doc # 1
2x Doc # 2

我需要用户始终在 Word 打印屏幕中 select 1 份,然后在宏提示框中 select 份数。

我该如何强制执行?

一个解决方案是关闭所有打印按钮和命令(禁用菜单 - 例如 CommandBars("Standard").Items(ID:=XX).Enabled = False,其中 XX 是打印和快速打印选项的 ID),然后只允许您的自定义打印宏调用打印功能。您还必须禁用功能区打印按钮和热键(OnKey 命令“^p”),您也可以将其重定向到您的宏。

所以我的解决方案涉及 ActiveDocument.PrintOut 中的一个标志,它指定副本 Copies:=1。这进入了打印文档的宏,在 DocumentBeforePrint 中我使用 Cancel = True.

这允许用户在 Word 中 select 任何他们想要的数字,它被汇集到 Cancel = True,然后宏询问 "how many copies would you like" 并打印 X 份递增的数字每一次。不知何故,即使是宏也会采用 word 中设置的副本数并将其应用到宏中,所以我会得到相同序列号文档的副本,这不是我想要的。

我看到用户在 Word 和 Macro MsgBox 中输入相同的数字,但实际上他们可以在 Word 中输入任何内容,只有 Macro 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