【问题标题】:Macro that checks how many copies are printed or blocks printing except by macro宏检查打印了多少份或阻止打印,除了宏
【发布时间】:2018-06-11 05:26:40
【问题描述】:

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

一些解决方案,例如:

  • 强制为 1 份打印作业
  • MsgBox "您一次只能选择打印 1 个副本"

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

推理:

我有一个宏可以打印带有递增数字的文档,但是如果您选择打印 2 份,然后宏询问“多少份”并且您说 2,您会得到 4 个文档。

2x Doc # 1
2x Doc # 2

我需要用户始终在 Word 打印屏幕中选择 1 个副本,然后在宏提示框中选择副本数。

我该如何执行?

【问题讨论】:

标签: vba ms-word office-2013


【解决方案1】:

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

【讨论】:

  • 关闭,但方法过于复杂。我不认为有办法做我上面问的,但我将使用与你回答的非常相似的方法
  • 我将使用打印前事件来取消所有打印作业并显示消息以仅通过宏快捷键打印。
  • ...为什么不取消打印作业然后只运行宏?当然,这种方法有几个问题,但我相信你会解决的!
【解决方案2】:

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

这允许用户在 Word 中选择他们想要的任何数字,然后将其发送到 Cancel = True,然后宏询问“您想要多少份”并打印 X 份,每次递增数字。以前不知何故,即使是宏也会获取 word 中设置的副本数量并将其应用到宏中,所以我会得到相同序列号文档的副本,这不是我想要的。

我看到用户在 Word 和 Macro MsgBox 中输入相同的数字,但实际上他们可以在 Word 中输入任何内容,只有 Macro MsgBox 才是重要的。

最后两个sn-ps代码如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    相关资源
    最近更新 更多