0

VSTO を使用して、シートに名前付き範囲を作成しています。すべての名前付き範囲の変更イベントを登録します。ここで、Excel シートに A1、A2、A3、A4 という 4 つの名前付き範囲をそれぞれ値 10、20、30、40 でレンダリングしたとします。私のセルB1、B2、B3、B4には、100、200、300、400の値があります(これらは通常のセルです)。ここで、B1:B4 から値をコピーして A1:A4 に貼り付けようとするとします。namedRange_Change イベントは 4 回呼び出されました。変更されたイベントのパラメーターはターゲット範囲です。この場合、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 に答える