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

时间:2008-09-15 21:33:26

标签: excel vba excel-vba printing printdialog

当我使用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调用有任何了解,并且他们正在做作者所声称的内容?

3 个答案:

答案 0 :(得分:2)

如果您不想显示打印对话框,则只需进行如下宏观测试即可;它不会显示任何打印对话框,并会检测默认打印机并立即打印。

sub  test()

 activesheet.printout preview:= false

end sub

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

答案 1 :(得分:1)

当您说“打印”对话框时,我认为您的意思是“现在打印xxx”对话框而不是标准打印对话框(选择打印机,份数等)。以上面的例子为例尝试一下,这就是我看到的行为 - “现在打印......”被简要地显示出来了。然后自动关闭。

您尝试控制的内容可能与Excel无关,而是与Windows级别相关。如果它是可控的,你需要a)禁用它,b)执行你的打印,c)重新启用。如果您的代码失败,则存在不为其他应用程序重新启用此风险的风险。

编辑:尝试此解决方案:How do you prevent printing dialog when using Excel PrintOut method。它似乎准确描述了你的目标。

答案 2 :(得分:1)

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

  1. 获取“打印”对话框窗口的句柄。
  2. 向窗口发送消息告诉它不要重绘
  3. 使窗口无效,这会强制重绘永不发生
  4. 告诉Windows重新绘制窗口,导致窗口消失。
  5. 说得过于温和,过于简单了。

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