これが私が Excel アドインで達成しようとしていることです。Excel ユーザーが範囲を選択し、それを削除します。その範囲のセル データ (彼が削除したものは何でも) をログ ファイルに書き込みたいと考えています。SOに関する複数の質問は、SheetChangeイベントハンドラーで削除された範囲を取得できないと言っています。保存する必要があります。LastRange
選択変更イベント メソッド ハンドラのグローバル変数に範囲を格納しています。LastRange
SheetChange イベント ハンドラが必要です。
問題は、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);
}
LastRange
Method1 内でまだ null である理由がわかりません。LastRange
SheetChange から に正しく渡されMethod1()
ます。これを機能させるための他のアイデアはありますか?