2011-12-14 2 views
12

Excel addin (XLL AddIn, MyAddIn)은 C#, ExcelDNA, NetOffice, VS2010으로 작성되었습니다. 클라이언트는 또 다른 addin을 가지고있다. (이것을 B이라고 부르 자.) 나는 VBA로 작성된 것 같다. 고객이 MyAddIn없이 B이 정상적으로 작동한다고 말합니다. VBA 및 ActiveX 추가 기능을 모두 사용하는 경우 Excel 오류 406입니다.

Error code: 406 Error message: Non-modal forms cannot be displayed in this host application from an ActiveX DLL, ActiveX Control, or Property Page.

내가 this Microsoft resource를 참조했지만 난 그냥 B 추가 기능이 변화하는 요구하는 클라이언트를 말하고 싶어하지 않습니다 MyAddIn가 설치되면, B 오류와 함께 실패합니다. 나는 내 편에서 이것을 피하기 위해 뭔가하고 싶다.

B의 추가 기능이 설치되어
  1. 는, 그것은 마이크로 소프트 Excel에 대한 레지스트리 항목을하지 않습니다 여기에

    이 문제를보고보고 단계입니다.
  2. MyAddin이 설치되면 Microsoft Excel에 대한 레지스트리 항목이 만들어집니다.
  3. 여기에 레지스트리 항목은 기본적으로 Excel이 시작될 때 추가 기능을 열어야 함을 나타내므로 B addin이 실행되지 않아 Excel이 제대로 작동하므로 MyAddIn이 정상적으로 작동합니다.
  4. 이제 B addin이 실행되면 위에 표시된 406 오류가 발생합니다.
  5. 오류를 무시하고 추가 기능 B을 계속 사용할 수 있습니다. 해결 방법은 MyAddIn입니다.
  6. B addin이 실행되면 B addin 전에 먼저 MyAddIn이로드 된 다음 406 오류가 발생합니다.
  7. MyAddIn을 제거하면이 오류가 더 이상 발생하지 않으며 모든 것이 정상적으로 작동합니다.
  8. 이 오류를 제거하기 위해 B 추가 기능을 항상 MyAddin 전에 열도록 레지스트리 순서를 변경했습니다. 이 작동하지만, 다음이 우리가 단지 Excel를 시작하는 경우에도, B 추가 기능 항상 열리지을 의미 마이크로 소프트 Excel위한 글로벌 변화
    • . 이것은 B addin으로 사용자가 정적 데이터로 작업 할 수 없기 때문에 바람직하지 않습니다. B addin은 실시간으로 새로 고침을 계속합니다. 그것이 B addin이 레지스트리 설정에서 항목을 만들지 않는 이유입니다. 따라서 레지스트리 변경은 옵션이 아닙니다. Excel이 열려있을 때마다 항상 B addin을 열 수는 없습니다.
+1

오류 메시지에서 언급 한대로 MyAddIn이 문제를 일으키는 넌 모달 폼을 표시하려고합니다. 그것이 어떤 형태인지 알아 내야합니다. 또한 코드를 게시 할 수 있다면 도움이 될 것입니다. – Tarik

답변

1

나는 대답을하지 않지만, 여기 당신이 시도 할 수 있습니다 몇 가지가 있습니다.

을 실행하면 어떤 유형의 Addin을 처리 할 수 ​​있는지 알 수 있습니다. 파일 | 옵션을 클릭하고 추가 기능 탭을 선택하십시오.

Addin B을로드하자마자 이벤트가 발생하면 아마도 상태가 아닌 모달이 아닌 대화 상자를 호출한다는 의미 일 수 있지만 비슷한 오류가 발생할 수있는 몇 가지 사항이 있습니다.

설명에 따르면 오류가 Addin의 대화 상자이거나 다른 추가 기능에있을 수있는 것처럼 들리며 추가 기능이 일부 상태 변경의 부작용으로 호출됩니다.

아래쪽으로 가려면 디버거를 연결해야합니다. Excel을 시작 프로젝트로 만들거나 나중에 첨부하여이 작업을 수행 할 수 있습니다. 이 경우 전자가 더 쉬울 것입니다. Visual Studio에서

  1. , 프로젝트를 사용하여 | 속성 |을 디버그하고 을 선택합니다. 외부 프로그램을 시작하고 Excel의 정규화 된 경로 이름을 입력하십시오. 수동으로

  2. 로드 Addin B 오류를 스스로 디버거로

  3. 휴식을주고 호출 스택을 검사합니다.

문제의 위치에 대한 단서를 자주 제공하지는 않지만 항상 첫 단계입니다. 유용한 정보 (스택 정보가 애드 인 사이의 전환에서 완전히 손실되는 경우)가 없다면 처리하는 모든 이벤트에서 프로젝트에 중단 점을 넣을 수 있습니다. 이것조차도 항상 안정적으로 작동하지는 않습니다 만 그럴 가치가 있습니다.

짐작할 수 있다면, 문제의 원인이되는 추가 기능에 이벤트 처리기가있는 것 같습니다. .Show을 'ShowDialog '로 변경하거나 이벤트 처리기 외부까지 양식 처리하지만 그건 그냥 추측입니다.