Vba 检查打印份数的宏,或按宏以外的方式阻止打印
我正在寻找帮助,为Word 2013创建一个简单宏,用于检查用户是否正在打印多份副本并取消打印作业。 一些解决方案,如:Vba 检查打印份数的宏,或按宏以外的方式阻止打印,vba,ms-word,office-2013,Vba,Ms Word,Office 2013,我正在寻找帮助,为Word 2013创建一个简单宏,用于检查用户是否正在打印多份副本并取消打印作业。 一些解决方案,如: 强制为1份复印打印作业 MsgBox“您一次只能选择打印一份” 显然,自动强制1会更好,但可能更复杂。我想只需一个提示+取消打印作业将是最简单的,然后用户可以返回并更改为打印1份 推理: 我有一个宏,它以递增的数字打印文档,但如果选择“打印2份”,则宏询问“有多少份”,然后选择“2”,则得到4份文档 2x Doc # 1 2x Doc # 2 我需要用户始终在Word打
- 强制为1份复印打印作业
- MsgBox“您一次只能选择打印一份”
2x Doc # 1
2x Doc # 2
我需要用户始终在Word打印屏幕中选择1份副本,然后在宏提示框中选择副本的#
如何执行此操作?一种解决方案是关闭所有打印按钮和命令(禁用菜单-例如
命令栏(“标准”)。项(ID:=XX)。Enabled=False
其中XX是打印和快速打印选项的ID),然后只允许自定义打印宏调用打印功能。您还必须禁用功能区打印按钮和热键(OnKey
用于“^p”的命令),您也可以将其重定向到宏。因此,我的解决方案在ActiveDocument.PrintOut
中包含一个标志,该标志指定了副本copies:=1
。这进入了打印文档的宏和DocumentBeforePrint
中,我使用Cancel=True
这允许用户在Word中选择他们想要的任何数字,并将其导入到Cancel=True
,然后宏询问“您想要多少份”,并按每次递增的数字打印X份。以前,即使是宏也会获取word中设置的副本数,并将其应用到宏中,因此我会得到相同序列号文档的副本,这不是我想要的
我看到用户在Word和宏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
很接近,但方法过于复杂。我不认为有什么方法可以实现我上面的要求,但我将使用一种与您的回答非常类似的方法我将使用“打印前”事件取消所有打印作业,并显示消息以仅通过宏快捷键打印。。。。为什么不取消打印作业,然后运行宏?当然,这种方法也有一些缺点,但我相信你会解决的!