【问题标题】:Excel worksheet change event is not firing when two workbooks are open打开两个工作簿时不会触发 Excel 工作表更改事件
【发布时间】:2019-01-17 23:25:50
【问题描述】:

我们正在创建一个 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 has changed 出现)。当我们打开第二个(不关闭第一个)时,任何一个工作簿中都不会出现消息(WorksheetChangeEventHandler 未执行),但 Application_WorkbookOpen 中的代码总是会被执行。

知道如何在打开两个工作簿时捕获 WorkSheet 更改事件吗?

【问题讨论】:

  • 在上述代码运行之后添加了第二个工作表吗?
  • 当我们打开第一个工作簿时,代码运行(消息 Cell has changed 出现)。当我们打开第二个(不关闭第一个)时,消息不会出现在任一工作簿中

标签: c# excel-addins


【解决方案1】:

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

【讨论】:

  • 实例化是什么意思?抱歉,我们是 Excel 插件的新手
  • 每个工作簿都是不同的对象。 Excel 不知道你在操作哪一个。
  • 这就是为什么我们有 public void Application_WorkbookOpen(Workbook Doc) 其中 Doc 是打开的工作簿。然后我们遍历它的每一张表来连接更改事件
  • 是的,我们用 WorkbookActivate 更改了 WorkbookOpen 并且工作正常!非常感谢!
  • 很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 2014-09-12
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
相关资源
最近更新 更多