Если предположить, что - это два разных процесса, вы не можете.
Это два разных экземпляра 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
), но может быть ненадежным или хитрым.