问题描述
下面的代码打开了我想检测正在打开的屏幕:
Sub test()
Application.CommandBars.ExecuteMso ("PrintPreviewAndPrint")
End Sub
它似乎没有激活我可以为其创建事件处理程序的 CommandBarButton 对象。关于如何在不更改文件选项卡结构的情况下执行此操作的任何想法,因为这仅与一个文档相关。目标是能够在打印文档之前设置双面打印,同时仍然可以使用标准的 File->Print 选项。
解决方法
你可以去老派。在有事件捕获之前,通过创建一个同名的例程来拦截命令是很常见的。
例如:
Public Sub PrintPreviewAndPrint()
MsgBox "Hello!"
End Sub
或者,您可以捕获 DocumentBeforePrint
事件,尽管这只会在对话框执行后触发。
无法重新调整后台 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