在Excel Workbook.BeforePrint事件中检测打印机

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

我发现,如果用户select“另存为”或“导出”来创buildPDF,它使用PDF打印机驱动程序来执行保存或导出并触发事件处理程序,但不会更新打印机设置为应用程序的活动打印机时,这样做。 有没有不同的方式来检测目标打印机?

VBA-Excel中

Debug.Print Application.ActivePrinter 

这可能工作。

 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格式。 我认为这是一个奇怪的事件。