Excel 如何制作';工作簿窗口激活';当我';我使用双显示器?

Excel 如何制作';工作簿窗口激活';当我';我使用双显示器?,excel,vba,Excel,Vba,当我将窗口从工作簿切换到同一屏幕中的另一工作簿时,可以成功调用此触发器(以及工作簿\u WindowDectivate),但当我切换到另一屏幕中的工作簿时,此触发器不起作用。 似乎它们属于两个不同的进程,我可以在任务管理器中找到2个Excel.exe 我的一个工作簿中有很多数据和切片器,这使得我的工作表运行非常缓慢,但我需要保持全局设置“自动计算”。 所以我试着用一个宏来消除它的计算。 我在工作时经常在两个屏幕上打开多个窗口,因此我的目的是在另一个屏幕上关注工作簿时调用此宏。假设有两个不同的进程

当我将窗口从工作簿切换到同一屏幕中的另一工作簿时,可以成功调用此触发器(以及工作簿\u WindowDectivate),但当我切换到另一屏幕中的工作簿时,此触发器不起作用。 似乎它们属于两个不同的进程,我可以在任务管理器中找到2个Excel.exe

我的一个工作簿中有很多数据和切片器,这使得我的工作表运行非常缓慢,但我需要保持全局设置“自动计算”。 所以我试着用一个宏来消除它的计算。 我在工作时经常在两个屏幕上打开多个窗口,因此我的目的是在另一个屏幕上关注工作簿时调用此宏。

假设有两个不同的进程,则无法调用此宏

这是两个不同的
Excel.Application
实例,每个实例都有自己的
工作簿
集合:您可以将一个实例称为“Vegas”,并说“在Vegas发生的事情,留在Vegas”

除非。。。除非您的代码完全拥有该其他实例:

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
引用“附加”到已经运行的第二个Excel实例可能是可行的(
GetObject
),但可能是不可靠或棘手的