命名范围更改事件无法正常工作

时间:2013-04-29 05:47:19

标签: vsto

我正在使用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次。更改事件的参数是目标范围,在这种情况下,所有4个已更改事件的目标范围将显示为A1:A4。如何识别调用已更改事件的单元格?为什么目标范围是A1:A4,它应该是受尊重的细胞。

1 个答案:

答案 0 :(得分: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();
    });
}