2008-09-15 201 views
5

当我使用PrintOut方法将Worksheet对象打印到打印机时,显示“打印”对话框(显示文件名,目标打印机,打印页面和取消按钮)即使我已经设置了DisplayAlerts = False。下面的代码在Excel宏中工作,但如果我在VB或VB.Net应用程序中使用此代码(使用Excel对象所需的引用更改),则会发生同样的情况。当使用Excel PrintOut方法时,如何防止打印对话框

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调用的知识,并且他们正在做作者声称的内容?

回答

1

当您说“打印”对话框时,我假设您的意思是“正在打印xxx”对话框而不是标准打印对话框(选择打印机,份数等)。以&以上的例子为例,我看到这种行为 - “现在正在打印...”短暂显示&,然后自动关闭。

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

编辑:试试这个解决方案:How do you prevent printing dialog when using Excel PrintOut method。它似乎准确地描述了你在做什么。

+0

是的,你的假设是正确的 - 抱歉,我没有指定。除了这个答案之外,有没有人知道这个Excel或Windows的行为? – 2008-09-16 13:23:15

1

由凯文·海恩斯链接的文章中的API调用隐藏在打印对话框中,像这样:

  1. 获取打印对话框窗口的句柄。
  2. 发送消息窗口来告诉它不要重绘
  3. 无效的窗口,这迫使重绘从未发生
  4. 告诉Windows重绘窗口,这会导致它消失。

这简直太简单了。

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

2

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

sub test() 

activesheet.printout preview:= false 

end sub 

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