2

これが私が Excel アドインで達成しようとしていることです。Excel ユーザーが範囲を選択し、それを削除します。その範囲のセル データ (彼が削除したものは何でも) をログ ファイルに書き込みたいと考えています。SOに関する複数の質問は、SheetChangeイベントハンドラーで削除された範囲を取得できないと言っています。保存する必要があります。LastRange選択変更イベント メソッド ハンドラのグローバル変数に範囲を格納しています。LastRangeSheetChange イベント ハンドラが必要です。

問題は、COM 例外が発生することです -

基になる RCW から分離された COM オブジェクトは使用できません。

どこかLastRangeが解放されていることを知っているため、例外があります。ここで別の SO の質問を参照しました。デリゲートへの強い参照があっても問題は解決しません。

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);
}

LastRangeMethod1 内でまだ null である理由がわかりません。LastRangeSheetChange から に正しく渡されMethod1()ます。これを機能させるための他のアイデアはありますか?

4

1 に答える 1