2013-04-29 73 views
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次。改變的事件的參數是目標範圍,在這種情況下,所有4個改變的事件的目標範圍是A1:A4。我如何識別改變的事件被調用的是哪個單元格?爲什麼目標範圍是A1:A4,它應該是受尊敬的單元格。命名範圍更改事件無法正常工作

回答

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(); 
    }); 
} 
+0

對不起,這麼晚回覆。但我仍不清楚這將如何工作。我瞭解如何使用匿名方法。但是在這裏,Target.get_Address將在cellAddress中獲得4個單元格。我有一個方法來監聽change事件。這兩個(name和cellAddress)會成爲該方法的參數嗎?你能解釋一下嗎? – 2013-05-14 06:20:50

+0

@RonakNisar您可以使用名稱和cellAddress作爲參數,從我的匿名方法調用過程。因此,我的方法的變量將成爲您的方法的參數。 – 2013-05-14 07:10:46

+0

我試過了,但它不起作用。對於所有四個更改的事件,cellAddress仍然以A1:A4的形式返回。我怎樣才能找到改變事件被調用的單元格。 – 2013-05-14 10:28:36