3

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

我发现的边缘情况是,如果用户选择“另存为”或“导出”来创建 PDF,它会使用 PDF 打印机驱动程序执行保存或导出并触发事件处理程序,但不会更新哪个这样做时,打印机被设置为应用程序的活动打印机。是否有不同的方法来检测目标打印机?

4

2 回答 2

0

这可能会奏效。

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 时不会触发。我认为这是一个奇怪的事件顺序。

于 2013-04-16T22:21:49.403 回答
0

VBA-Excel

Debug.Print Application.ActivePrinter
于 2013-04-16T20:40:23.443 回答