【问题标题】:Detect Printer in Excel Workbook.BeforePrint Event在 Excel Workbook.BeforePrint 事件中检测打印机
【发布时间】:2013-04-16 20:37:17
【问题描述】:

在 Excel 中处理 Workbook.BeforePrint 事件时,有没有办法确定目标打印机?我知道事件处理程序签名允许取消事件,如 here 所述,但我想取消所有打印事件,除非打印机是 PDF 打印机。

我发现的极端情况是,如果用户选择“另存为”或“导出”来创建 PDF,它会使用 PDF 打印机驱动程序执行保存或导出并触发事件处理程序,但不会t 更新设置为应用程序的活动打印机的打印机。是否有其他方法可以检测目标打印机?

【问题讨论】:

    标签: vb.net excel events vba


    【解决方案1】:

    VBA-Excel

    Debug.Print Application.ActivePrinter
    

    【讨论】:

    • 谢谢,这适用于所有正常情况,但不包括其他几种创建 PDF 的方法。我已将我的问题扩展为更清楚一点。
    • 你可以陷印Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)并默认设置相关的pdf打印机?一旦保存完成,将其恢复到原始打印机?如果用户进行正常保存,则更改默认打印机不会有任何效果。
    • 这是个好主意,但我发现如果您导出为 PDF 而不是保存为 PDF,Workbook_BeforeSave 永远不会触发,因此您没有机会设置打印机。你知道检测出口的方法吗?
    • 你指的是expression.ExportAsFixedFormat()方法吗?
    • 基本上,但通过 UI 完成,而不是通过编程方式完成。选择文件->导出->在 Office 2013 中创建 PDF/XPS 文档或文件->保存并发送->在 Office 2010 中创建 PDF/XPS 文档是我要处理的最后一个选项。
    【解决方案2】:

    这可能有效。

    Private mbSaving As Boolean
    
    Private Sub Workbook_AfterSave(ByVal Success As Boolean)
    
        mbSaving = False
    
    End Sub
    
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    
        If InStr(1, Application.ActivePrinter, "PDF") = 0 And Not mbSaving Then
            Cancel = True
        End If
    
        mbSaving = False
    
    End Sub
    
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
        mbSaving = True
    
    End Sub
    

    Workbook_AfterSave 在另存为 PDF 时不会触发。我认为这是一个奇怪的事件顺序。

    【讨论】:

    • 这太接近了。 Workbook_AfterSave 不会在另存为 PDF 时触发,但 Workbook_BeforePrint 会触发,因此它给了我一个可检测的事件,并且您发布的内容对此非常有用。它无法处理的一种情况是,如果您选择“导出”来创建 PDF。这将在 Workbook_BeforePrint 处理程序中捕获,但不会在任何一个保存处理程序中捕获。有没有办法检测出口?我还没有找到。
    • 如何导出?我没有在功能区上看到任何内容。
    • 文件->导出->在 Office 2013 中创建 PDF/XPS 文档或文件->保存并发送->在 Office 2010 中创建 PDF/XPS 文档。
    • 这很难。正在努力。
    • 我很难过。我不认为有这样的事件。您可能会重新调整功能区控件的用途。 blogs.msmvps.com/wordmeister/2012/10/01/backstage-wordvba
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多