다음은 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