ここで私はExcel Addinで達成しようとしていることがあります。 Excelユーザーが範囲を選択し、その範囲を削除します。私はその範囲のセルデータ(彼が削除したもの)をログファイルに書きたいと思います。あなたはSheetChangeイベントハンドラで削除された範囲を取得することはできませんので、あなたはそれを格納する必要があります。私は選択変更イベントメソッドハンドラでグローバル変数LastRange
に範囲を格納しています。 SheetChangeイベントハンドラでLastRange
が必要です。その基盤となるRCWから分離されているExcelで削除された範囲を取得する
COMオブジェクトが を使用することはできません -
問題は、私はCOM例外を取得することです。
私はどこかでLastRange
が解放され、したがって例外が発生していることを知っています。 私は別のSOの質問hereを参照しました。デリゲートへの強い言及があるにもかかわらず、問題は持続する。
private ADXExcelSheet_EventHandler sheetChangeEventHandler;
private ADXExcelSheet_EventHandler sheetSelectionChangeEventHandler;
private void InitializeComponent()
{
sheetChangeEventHandler = new AddinExpress.MSO.ADXExcelSheet_EventHandler(SheetChange);
excelEvents.SheetChange += sheetChangeEventHandler;
sheetSelectionChangeEventHandler = new ADXExcelSheet_EventHandler(SheetSelectionChange);
excelEvents.SheetSelectionChange += sheetSelectionChangeEventHandler;
}
//....
Range LastRange;
public void SheetSelectionChange(object sender, object sheet, object range)
{
LastRange = (range as Range);
}
public void SheetChange(object sender, object sheet, object range)
{
ClassX.Method1(range as Range, LastRange);
}
なぜLastRange
がMethod1の中でまだnullであるかわかりません。 LastRange
は、SheetChangeからMethod1()
に正しく渡されます。これを得るための他のアイデアは何ですか?
excelEventsはaddinexpressのものですか? Application.SheetSelectionChangeイベントハンドラは少し異なります – Slai
はい。 Excelevents from Addinexpress – user1
Add-in Expressは、イベントハンドラが終了した直後にイベントハンドラに渡されたすべてのCOMオブジェクトを解放するようです。回避策はありますか?私は、削除された範囲オブジェクトを保存し、それを別のイベントハンドラに再利用したい。 – user1