如何使用Excel PrintOut方法防止打印对话框

当我使用PrintOut方法将Worksheet对象打印到打印机时,即使设置了DisplayAlerts = False,也会显示“打印”对话框(显示文件名,目标打印机,打印的页面和取消button)。 下面的代码在Excelmacros中工作,但如果我在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开”对话框而不是标准的打印对话框(select打印机,份数等)。 以上面的例子和尝试,这是我看到的行为 – “现在打印…”短暂显示,然后自动closures。

您试图控制的内容可能不会绑定到Excel,而是Windows级别的行为。 如果它是可控的,你需要a)禁用它,b)执行你的打印,c)重新启用。 如果您的代码失败,则不会为其他应用程序重新启用。

编辑:试试这个解决scheme: 如何使用Excel PrintOut方法防止打印对话框 。 它似乎描述你到底是什么。

如果您不想显示打印对话框,那么只需进行如下的macrostesting; 它不会显示任何打印对话框,并会检测到默认打印机并立即打印。

 sub test() activesheet.printout preview:= false end sub 

运行这个macros,它将打印当前活动的工作表,而不显示打印对话框。

由Kevin Haines链接的文章中的API调用隐藏了“打印”对话框,如下所示:

  1. 获取打印对话窗口的句柄。
  2. 发送一条消息给窗口,告诉它不要重画
  3. 使窗口无效,强制重绘,这从来没有发生
  4. 告诉Windows重新绘制窗口,导致它消失。

这太简单了。

API调用是安全的,但是如果应用程序失败,您可能需要确保“打印”对话框的屏幕更新设置为True。