Как заставить 'Workbook_WindowActivate' быть вызванным, когда я использую двойной показ? - PullRequest
0 голосов
/ 24 января 2019

Этот триггер (и Workbook_WindowDectivate) может быть успешно вызван, когда я переключаю окно с рабочей книги на другую рабочую книгу на том же экране, но когда я переключаюсь на рабочую книгу на другом экране, он не работает.Кажется, они принадлежат к двум различным процессам, я могу обнаружить, что в диспетчере задач есть 2 Excel.exe.

У меня много данных и много слайсеров в одной из моих книг, которые заставляют мои листы работать оченьмедленно, но мне нужно оставить глобальный параметр AutoCalculate включен.Поэтому я пытаюсь использовать макрос, чтобы отключить его вычисления.При работе я часто открываю несколько окон на 2 экранах, поэтому я хочу, чтобы этот макрос вызывался, когда я фокусируюсь на книге на другом экране.

1 Ответ

0 голосов
/ 24 января 2019

Если предположить, что - это два разных процесса, вы не можете.

Это два разных экземпляра Excel.Application, каждый со своей собственной коллекцией Workbooks: вы можете вызвать один экземпляр«Вегас» и скажите «что происходит в Вегасе, остается в Вегасе» .

Если только ... если ваш код полностью не владеет другим экземпляром:

Private WithEvents OtherExcel As Excel.Application

Private Sub Workbook_Open()
    Set OtherExcel = New Excel.Application
    OtherExcel.Visible = True
End Sub

Private Sub OtherExcel_WindowActivate(Wb As Workbook, Wn As Window)

End Sub

Private Sub OtherExcel_WindowDeactivate(Wb As Workbook, Wn As Window)

End Sub

... с несколькими оговорками:

  • Каждый раз открывается новый экземпляр Excel
  • Он не обрабатывает третий экземпляр
  • Если контекст выполнения умирает, объект OtherExcel исчезает
    • Контекст выполнения умирает всякий раз, когда VBE решает, что изменение кода требует перекомпиляции
    • Или всякий раз, когда возникает необработанная ошибка
    • Или когда встречается оператор End
  • Если экземпляр OtherExcel закрыт, объект исчезает;если затем запускается другой экземпляр, объект OtherExcel по-прежнему исчезает.

Вы можете обойти эти ограничения, выставив макрос, который переназначает OtherExcel по требованию.«Присоединение» ссылки OtherExcel к уже запущенному 2-му экземпляру Excel, вероятно, может быть выполнено (на ум приходит GetObject), но может быть ненадежным или хитрым.

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