Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Workbook.SheetChange事件处理程序在切换工作簿后丢失_C#_Excel_Vsto - Fatal编程技术网

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

C# Workbook.SheetChange事件处理程序在切换工作簿后丢失,c#,excel,vsto,C#,Excel,Vsto,有人可以在Excel VSTO加载项中解释以下事件行为吗 我设置了工作簿工作表更改事件,如下所示: Workbook wb = Globals.ThisAddIn.Application.ActiveWorkbook; wb.SheetChange += workbook_Change; 事件处理程序只是在被击中时发出警报 public static void workbook_Change(Object sh, Range Target) { MessageBox.Show("Bo

有人可以在Excel VSTO加载项中解释以下事件行为吗

我设置了工作簿工作表更改事件,如下所示:

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事件处理程序会丢失


有人能提供一些见解吗?

我无法找到工作簿事件丢失的解决方案,我相信这种情况仍然存在,我重新注册事件处理程序的工作也没有可靠地进行。更好的解决方法是针对应用程序注册工作表更改处理程序

Application.SheetChange += new Excel.AppEvents_SheetChangeEventHandler(Application_SheetChange);
此事件针对每个工作表/工作簿激发,但我可以使用

Worksheet theSheet = Globals.ThisAddIn.Application.ActiveSheet;
我希望这能帮助其他有同样问题的人