检查打印份数或阻止打印的宏,除非通过宏
Macro that checks how many copies are printed or blocks printing except by macro
我正在寻求帮助,为 Word 2013 创建一个简单的宏,检查用户是否正在打印超过 1 份并取消打印作业。
一些解决方案如:
- 强制为 1 份打印作业
- MsgBox"You should only select print 1 Copy at a time"
显然自动强制 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
我正在寻求帮助,为 Word 2013 创建一个简单的宏,检查用户是否正在打印超过 1 份并取消打印作业。
一些解决方案如:
- 强制为 1 份打印作业
- MsgBox"You should only select print 1 Copy at a time"
显然自动强制 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