0

我正在使用 VSTO 在我的工作表上创建命名范围。我为所有命名范围注册了更改事件。现在假设我在我的 Excel 工作表上渲染了 4 个命名范围,例如 A1、A2、A3、A4,其值分别为 10、20、30、40。在我的单元格 B1、B2、B3、B4 上,我的值为 100,200,300,400(这些是正常单元格)。现在,如果我尝试从 B1:B4 复制值并粘贴到 A1:A4。namedRange_Change 事件被调用了 4 次。Changed Event 的参数是 Target Range,在这种情况下,所有 4 个已更改事件的目标范围为 A1:A4。如何确定调用更改事件的单元格?以及为什么目标范围是 A1:A4,它应该是受尊重的单元格。

4

1 回答 1

1

此事件处理程序中的目标是整个更改范围。我看到知道更改了哪个命名范围的唯一方法是使用匿名方法。例如:

for (int i = 1 ; i <= 4 ; i++) {
    NamedRange range = sheet.Controls.AddNamedRange(sheet.Cells[i, 1], "_cell" + i.ToString());
    range.Change += new DocEvents_ChangeEventHandler((Range Target) => {
        string name = ((dynamic) range.Name).Name;
        string cellAddress = Target.get_Address();
    });
}
于 2013-04-29T07:16:13.007 回答