Событие приложения Excel VBA сработало дважды - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь сменить активный принтер в соответствии с именем листа при нажатии на кнопку «Быстрая печать», однако событие 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, как упомянуто Мэтли

1 Ответ

0 голосов
/ 04 сентября 2018

Я заново создал ваши модули, и единственная ошибка, которую я получил, была в коде Debug.Print assignPrinter , в котором я заменил assignPrinter .

Остальные коды работают нормально. App_WorkbookBeforePrint не сработал дважды. Вы можете установить точку останова в App_WorkbookBeforePrint , а затем заглянуть в стек, чтобы увидеть, какие триггеры App_WorkbookBeforePrint во второй раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...