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;
我希望这对遇到同样问题的其他人有所帮助。
谁能解释 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 触发,但我随后可以使用
引用所选作品sheetWorksheet theSheet = Globals.ThisAddIn.Application.ActiveSheet;
我希望这对遇到同样问题的其他人有所帮助。