任何人都可以在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事件处理程序丢失了?
谁能提供一些见识?
答案 0 :(得分:0)
我找不到丢失工作簿事件的解决方案,我相信这仍然会发生,我重新注册事件处理程序的变通方法也无法可靠地工作。更好的解决方法是改为向应用程序注册工作表更改处理程序。
Application.SheetChange += new Excel.AppEvents_SheetChangeEventHandler(Application_SheetChange);
此事件针对每个工作表/工作簿触发,但是我可以使用引用选定的工作表
Worksheet theSheet = Globals.ThisAddIn.Application.ActiveSheet;
我希望这对其他遇到相同问题的人有所帮助。