在 Excel 中处理 Workbook.BeforePrint 事件时,有没有办法确定目标打印机?我知道事件处理程序签名允许取消事件,如此处所述,但我想取消所有打印事件,除非打印机是 PDF 打印机。
我发现的边缘情况是,如果用户选择“另存为”或“导出”来创建 PDF,它会使用 PDF 打印机驱动程序执行保存或导出并触发事件处理程序,但不会更新哪个这样做时,打印机被设置为应用程序的活动打印机。是否有不同的方法来检测目标打印机?
这可能会奏效。
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 时不会触发。我认为这是一个奇怪的事件顺序。
VBA-Excel
Debug.Print Application.ActivePrinter