使用Excel PrintOut方法时如何防止打印对话框
时间:2020-03-05 18:54:37 来源:igfitidea点击:
当我使用PrintOut方法将工作表对象打印到打印机时,即使设置了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方法时如何防止打印对话框。它似乎准确地描述了我们所追求的。
回答
由Kevin Haines链接的文章中的API调用隐藏了"打印"对话框,如下所示:
- 获取"打印"对话框窗口的句柄。
- 向窗口发送消息,告诉它不要重绘
- 使窗口无效,这将强制进行从未发生的重绘
- 告诉Windows重新绘制窗口,这将使其消失。
轻描淡写地过分简化了。
API调用是安全的,但是如果应用程序失败,则可能需要确保将"打印"对话框的屏幕更新设置为"真"。