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

时间:2018-12-12 01:33:48

标签: c# excel vsto

任何人都可以在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事件处理程序丢失了?

谁能提供一些见识?

1 个答案:

答案 0 :(得分:0)

我找不到丢失工作簿事件的解决方案,我相信这仍然会发生,我重新注册事件处理程序的变通方法也无法可靠地工作。更好的解决方法是改为向应用程序注册工作表更改处理程序。

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

此事件针对每个工作表/工作簿触发,但是我可以使用引用选定的工作表

Worksheet theSheet = Globals.ThisAddIn.Application.ActiveSheet;

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