Excel 当两个工作簿打开时,工作表更改事件未触发
Excel worksheet change event is not firing when two workbooks are open
我们正在创建一个 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 更改事件吗?
您需要实例化和取消实例化工作簿的每个实例,然后处理每个实例的工作表。您还需要激活您正在处理的工作簿。
我们正在创建一个 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 更改事件吗?
您需要实例化和取消实例化工作簿的每个实例,然后处理每个实例的工作表。您还需要激活您正在处理的工作簿。