打开两个工作簿时,不会触发Excel工作表更改事件

时间:2019-01-17 23:25:51

标签: c# excel-addins

我们正在创建一个C#Excel加载项,并且希望捕获WorkSheet更改事件。我们做了以下工作:

private static DocEvents_ChangeEventHandler EventDel_CellsChange;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    this.Application.WorkbookOpen += Application_WorkbookOpen;
    EventDel_CellsChange = new DocEvents_ChangeEventHandler(WorksheetChangeEventHandler);
}

public void Application_WorkbookOpen(Workbook Doc)
{
    Sheets asp = Doc.Worksheets;
    foreach(Worksheet hoja in asp)
    {
        hoja.Change += EventDel_CellsChange;
    }
}

public void WorksheetChangeEventHandler(Range Target)
{
    MessageBox.Show("Cell has changed");
}

当我们打开第一个工作簿时,代码将运行(消息Cell已更改)。当我们打开第二个(不关闭第一个)时,在任何一个工作簿中都不会出现该消息(未执行WorksheetChangeEventHandler),但是Application_WorkbookOpen中的代码始终会执行。

有两个打开工作簿时如何捕获WorkSheet更改事件的想法吗?

1 个答案:

答案 0 :(得分:0)

您需要实例化和取消实例化工作簿的每个实例,然后在每个工作簿的工作表上进行工作。您还需要激活正在处理的工作簿。