【问题标题】:How can I catch the Print option being selected in the File menu/tab in Word 2016 (backstage view)?如何捕捉在 Word 2016(后台视图)的文件菜单/选项卡中选择的打印选项?
【发布时间】:2021-03-27 14:47:02
【问题描述】:

以下代码会打开我想要检测的屏幕:

Sub Test()
  Application.CommandBars.ExecuteMso ("PrintPreviewAndPrint")
End Sub

它似乎没有激活我可以为其创建事件处理程序的 CommandBarButton 对象。关于如何在不必更改文件选项卡结构的情况下执行此操作的任何想法,因为这仅与一个文档相关。目标是能够在打印文档之前设置双面打印,同时仍然可以使用标准的 File->Print 选项。

【问题讨论】:

    标签: vba printing ms-word


    【解决方案1】:

    你可以去老学校。在没有捕获事件之前,通过创建一个同名的例程来拦截命令是很常见的。

    例如:

    Public Sub PrintPreviewAndPrint()
       MsgBox "Hello!"
    End Sub
    

    或者,您可以捕获DocumentBeforePrint 事件,但这只会在对话框执行后触发。

    【讨论】:

    • 感谢您的建议。不幸的是,由于 Backstage 视图的工作方式,没有可以通过这种方式捕获的宏“PrintPreviewAndPrint”。而且 DocumentBeforePrint 事件确实触发得太晚了。
    • @A.Boersma - “没有可以通过这种方式捕获的宏“PrintPreviewAndPrint”” - 没有。正如我在回答中解释的那样,您必须编写它。不,您无法显示 Backstage 视图,但您可以在没有它的情况下执行您在问题中说想要执行的所有操作。
    • @A.Boersma - 我应该指出,上述方法的优点是捕获了 Ctrl+P 键盘快捷键和快速访问工具栏中的按钮。如果您只使用访问 Print 的慢速方法,那么您唯一的选择就是破解 Backstage 视图,这对于单个文档来说似乎过于重要了。
    【解决方案2】:

    没有办法重新利用后台 UI 控件,但您可以创建自己的 UI。因此,更好的解决方案是考虑隐藏内置 UI 并使用自定义命令完全重建它。 Introduction to the Office 2010 Backstage View for Developers 文章解释了构建自定义后台 UI 的基础知识。

    Application.DocumentBeforePrint 事件允许取消默认操作,因此您可以使用PrintOut 方法以您想要的方式以编程方式打印文档。

    Public WithEvents appWord as Word.Application 
     
    Private Sub appWord_DocumentBeforePrint _ 
     (ByVal Doc As Document, _ 
     Cancel As Boolean) 
     
     Dim intResponse As Integer 
     
     intResponse = MsgBox("Have you checked the " _ 
     & "printer for letterhead?", _ 
     vbYesNo) 
     
     If intResponse = vbNo Then Cancel = True 
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 2020-05-29
      相关资源
      最近更新 更多