Я пытаюсь сменить активный принтер в соответствии с именем листа при нажатии на кнопку «Быстрая печать», однако событие App_WorkbookBeforePrint
запускается дважды. Пробовал App_WorkbookBeforeClose
тоже срабатывает дважды. Я уже изменил функцию «Перехват ошибок» на «Ошибка при всех ошибках», но, похоже, ошибок не было.
ThisWorkbook:
Private XLApp As CExcelEvents
Private Sub Workbook_Open()
Set XLApp = New CExcelEvents
End Sub
Модули класса:
Option Explicit
Private WithEvents App As Application
Private Sub Class_Initialize()
Set App = Application
End Sub
Private Sub App_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
MsgBox Wb.FullName
assignPrinter
End Sub
Модуль:
Const printer1 As String = "Bullzip PDF Printer on Ne10:"
Const printer2 As String = "EPSONF7E8B5 (L565 Series) on Ne07:"
Public Sub assignPrinter()
Dim ws As Worksheet
Dim wsn As String
Set ws = ActiveWorkbook.ActiveSheet
wsn = ws.Name
Select Case wsn
Case "FGWIP"
Application.ActivePrinter = printer1
ws.PrintOut
Exit Sub
Case "Rework"
Application.ActivePrinter = printer2
ws.PrintOut
Exit Sub
Case Else
MsgBox "Else case."
Exit Sub
End Select
End Sub
Обновление:
Используйте App_SheetActivate
вместо App_WorkbookBeforePrint
для смены активного принтера и удалите ws.Printout
, как упомянуто Мэтли