2012-03-17 2 views
1

셀의 명명 된 범위를 얻으려면 내 코드 heres. 클릭 한 셀이 첫 번째 시트에 있으면 제대로 작동합니다. 하지만 다른 시트에서 셀을 선택하는 순간, 그냥 HRESULT에서 예외를 throw : 0x800A03EC 오류셀의 명명 된 범위 찾는 방법 - VSTO 예외를 throw합니다

그 글의 결론을 얻을 스택 있지만 힘에 비슷한 질문을 보았다 : 여기 을 내 코드 :

  Microsoft.Office.Interop.Excel.Workbook _workbook = ThisAddIn.Application.ActiveWorkbook; 

      Microsoft.Office.Interop.Excel.Range Target = (Microsoft.Office.Interop.Excel.Range)Globals.ThisAddIn.Application.ActiveCell; 
      foreach (Microsoft.Office.Interop.Excel.Name name in _workbook.Names) 
      { 
       Microsoft.Office.Interop.Excel.Range intersectRange = _workbook.Application.Intersect(Target, name.RefersToRange); 
       if (intersectRange != null) 
       { 
        rangeName = name.Name; 
        break; 
       } 
      } 
+0

어떤 줄이 예외로 표시됩니까? –

+0

나는 호기심있다. 'InteropReference'는 무엇을위한 것인가요? 나는 나의 경험에서 그것을 필요로하는 것을 (또는 본) 기억하지 않는다. –

+0

사용자 정의 개체와 동일합니다. 나는 그 것을 무시하는 코드를 업데이트했다. – Cannon

답변

4

범위가 다른 시트에있는 경우 오류를 발생시키지 않고 인터 섹트를 사용할 수 없습니다.

하지 않을 경우는 다음 있는 MsgBox를 ActiveCell (ActiveCell.ListObject 아무것도 아닙니다) 당신이 이름을 얻을 수있는 간단한 방법을 시도 Intersect()

+0

감사합니다. 그게 내 문제를 해결해 줬어. – Cannon

0

Globals.ThisAddIn.ExcelApplication 개체로 보입니다. Globals.ThisAddIn.Application과 다른 인스턴스 일 수 있습니다. 에 따르면 http://www.ureader.com/message/692318.aspxApplication 사이의 개체를 사용하여 예외를 트리거 할 수 있습니다.

Application 인스턴스 중 하나 또는 둘 모두를 사용하도록 코드를 변경하십시오.

+0

아, 질문에서 '전역.이 애드 인. 엑셀'에 대한 참조를 삭제했습니다. 테스트 해 봤어? –

+0

두 가지 방법으로 테스트했습니다. Dint가 내 문제를 해결합니다. – Cannon

0

을 시도하기 전에, 각 범위의 Parent 속성이 같은 시트를 참조 여부를 확인하기 위해 검사를 추가 .ListObject.Name 끝 부분