Excel 的 VSTO 自定义:事件处理程序在打开多个 excel 文件的情况下不起作用

VSTO customization for Excel: event handler not working given multiple excel files are open

Excel 的文档级 VSTO 自定义注册事件处理程序 - OnSheetChangeEventHanlder - 工作 sheet Change 事件。

using Excel = Microsoft.Office.Interop.Excel;

public partial class ThisWorkbook
{
    private void InternalStartup()
    {
        this.Open += ThisWorkbookOpen;
    }

    private void ThisWorkbookOpen()
    {
        Excel.Sheets sheets = this.Sheets;
        Excel.Worksheet sheet = null;

        for (int i = 1, length = sheets.Count; i <= length; i++)
        {
            sheet = sheets[i];

            sheet.Change += OnSheetChangeEventHanlder;
        }   

        if (sheet != null) Marshal.ReleaseComObject(sheet);
        if (sheets != null) Marshal.ReleaseComObject(sheets);
    }

    private void OnSheetChangeEventHanlder(Excel.Range Target)
    {
        // ..
    }
}

正如预期的那样,只要 sheet 数据发生更改,就会调用 OnSheetChangeEventHanlder。但是,如果我们打开两个具有相同自定义的 excel 文档并尝试在其中一个中编辑 sheet 数据,则不会调用 OnSheetChangeEventHanlder。它看起来令人困惑,更多的是因为它是文档级自定义,这让我希望自定义实例应该相互隔离。

总结一下:为什么存在另一个打开的 excel 文件会阻止事件注册或 运行 自定义事件处理程序?

好吧,我无法解决这个问题或找到解释,最后找到了一个解决方法:在订阅 this.ActivateEvent 的另一个事件处理程序中删除并重新附加 OnSheetChangeEventHandler