当我使用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调用有任何了解,并且他们正在做作者所声称的内容?
答案 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调用隐藏了“打印”对话框,如下所示:
说得过于温和,过于简单了。
API调用是安全的,但如果应用程序失败,您可能希望确保“打印”对话框的屏幕更新设置为True。