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

Posted

技术标签:

【中文标题】使用 Excel PrintOut 方法时如何防止打印对话框【英文标题】:How do you prevent printing dialog when using Excel PrintOut method 【发布时间】:2010-09-09 04:40:25 【问题描述】:

当我使用 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 调用以及他们正在做作者声称的事情?

【问题讨论】:

【参考方案1】:

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

sub  test()

 activesheet.printout preview:= false

end sub

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

是的,您的假设是正确的 - 抱歉,我没有具体说明。除了这个答案,有人知道这是 Excel 还是 Windows 的行为?【参考方案3】:

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

    获取打印对话窗口的句柄。 向窗口发送消息,告诉它不要重绘 使窗口无效,这会强制重绘永远不会发生 告诉 Windows 重新绘制窗口,这会导致它消失。

说得委婉些,过于简单化了。

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

【讨论】:

以上是关于使用 Excel PrintOut 方法时如何防止打印对话框的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL数据有效性里面怎样实现批量打印?如何一键完成打印第一页跟第二页?

如何防止excel关闭复制选框

如何防止excel在打开CSV文件时对其进行任何更改

java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的

Python - 如何防止for循环覆盖相同的excel表

从 excel 导入数据时防止 SQL Server 2008 中的行重复