使用 Excel PrintOut 方法时如何防止打印对话框
-
09-06-2019 - |
题
当我使用 PrintOut 方法将 Worksheet 对象打印到打印机时,即使我设置了 DisplayAlerts = False,也会显示“打印”对话框(显示文件名、目标打印机、打印的页面和取消按钮)。下面的代码适用于 Excel 宏,但如果我在 VB 或 VB.Net 应用程序中使用此代码(使用 Excel 对象所需的引用更改),也会发生同样的情况。
Public Sub TestPrint()
Dim vSheet As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set vSheet = ActiveSheet
vSheet.PrintOut Preview:=False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
编辑:下面的答案更清楚地说明了这一点(它可能是 Windows 对话框而不是 Excel 对话框),但没有回答我的问题。有谁知道如何防止它被显示?
编辑:感谢您的额外研究,凯文。看起来这很像是我所需要的。只是不确定我想盲目接受这样的 API 代码。还有其他人了解这些 API 调用以及他们正在做作者声称的事情吗?
解决方案
当您说“打印”对话框时,我假设您指的是“正在打印 xxx”对话框,而不是标准打印对话框(选择打印机、份数等)。以上面的示例并尝试一下,这就是我看到的行为 - “正在打印...”短暂显示然后自动关闭。
您试图控制的内容可能与 Excel 无关,而是 Windows 级别的行为。如果它是可控的,您需要 a) 禁用它,b) 执行打印,c) 重新启用。如果您的代码失败,则存在无法为其他应用程序重新启用此功能的风险。
编辑:尝试这个解决方案: 使用 Excel PrintOut 方法时如何防止打印对话框. 。它似乎准确地描述了你所追求的。
其他提示
如果你不想显示打印对话框,那么只需进行如下宏测试即可;它不会显示任何打印对话框,并且会检测默认打印机并立即打印。
sub test()
activesheet.printout preview:= false
end sub
运行此宏,它将打印当前活动的工作表,而不显示打印对话框。
Kevin Haines 链接的文章中的 API 调用隐藏了“打印”对话框,如下所示:
- 获取打印对话框窗口的句柄。
- 向窗口发送消息告诉它不要重绘
- 使窗口无效,这会强制重绘,但从未发生过
- 告诉 Windows 重新绘制窗口,这会导致窗口消失。
温和地说,这过于简单化了。
API 调用是安全的,但如果应用程序失败,您可能需要确保“打印”对话框的屏幕更新设置为 True。