Workbook.SheetChange 切换工作簿后事件处理程序丢失

Workbook.SheetChange event handler lost after switching workbooks

谁能解释 Excel VSTO 加载项中的以下事件行为?

我设置了一个 Workbook SheetChange 事件如下:

Workbook wb = Globals.ThisAddIn.Application.ActiveWorkbook;

wb.SheetChange += workbook_Change;

并且事件处理程序只是在它被击中时发出警报。

public static void workbook_Change(Object sh, Range Target)
{
    MessageBox.Show("Book Change HIT", "Book Change: " + (sh as Worksheet).Name);
    return;
}

在修改活动工作簿中的单元格时事件按预期触发,直到用户切换到同一 Excel 会话中的不同工作簿。 在工作簿之间切换后,更改事件丢失并且不会再次触发。

在同一工作簿中的工作表之间切换,或在单独的 Excel 个实例之间切换时,行为符合预期并且事件持续触发。

我的期望是该事件应保持附加到工作簿,不会卸载或丢失或在工作簿之间切换时发生任何事情。

作为变通方法,我创建了一个 Application.WorkbookActivate 处理程序,只要重新激活工作簿,它就会重新注册更改事件处理程序。 这似乎解决了问题,但我仍然很好奇为什么切换工作簿时 Sheetchange 事件处理程序丢失?

谁能提供一些见解?

我找不到工作簿事件丢失的解决方案,我相信这种情况仍然会发生,我的 work-around 到 re-register 事件处理程序也无法可靠地工作。更好的 work-around 是针对应用程序注册 sheet 更改处理程序。

Application.SheetChange += new Excel.AppEvents_SheetChangeEventHandler(Application_SheetChange);

此事件针对每个 worksheet/workbook 触发,但我随后可以使用

引用所选作品sheet
Worksheet theSheet = Globals.ThisAddIn.Application.ActiveSheet;

我希望这对遇到同样问题的其他人有所帮助。