Подтвердить что ты не робот

Ошибка Excel 406 при использовании как добавок VBA, так и ActiveX.

My Excel addin (XLL AddIn, call it MyAddIn) построен с С#, ExcelDNA, NetOffice, VS2010. У клиента есть еще один addin (пусть назовите его B), я думаю, он написан в VBA. Клиент говорит, что B отлично работает без MyAddIn. Как только MyAddIn установлен, B выходит из строя с ошибкой:

Код ошибки: 406 Сообщение об ошибке: немодальные формы не могут отображаться в этом хост-приложении из ActiveX DLL, элемента управления ActiveX или страницы свойств.

Я видел этот ресурс Microsoft, но я не хочу просто сообщать клиенту, что B addin необходимо изменить. Я хочу сделать что-то, чтобы избежать этого с моей стороны.

Ниже приведены шаги, описанные для устранения проблемы:

  • Когда B addin установлен, он не делает записи реестра для Microsoft Excel.
  • Когда MyAddIn установлен, он записывает запись в Microsoft Excel.
  • Записи реестра здесь в основном говорят о том, что addin следует открывать при запуске Excel, поэтому B addin не запускается, Excel отлично работает, MyAddIn работает нормально.
  • Теперь, когда запускается B addin, он дает ошибку 406, показанную выше.
  • Мы можем игнорировать ошибку и продолжать работать с B addin; отключение MyAddIn является обходным путем.
  • Когда запускается B addin, мы видим, что MyAddIn загружается сначала перед добавлением B, а затем получает ошибку 406.
  • Когда мы удаляем MyAddIn, эта ошибка больше не встречается, и все работает нормально.
  • Чтобы удалить эту ошибку, мы попытались изменить порядок регистрации, чтобы сделать B addin всегда открытым до MyAddIn.
    • Это работает, но тогда это глобальное изменение для Microsoft Excel, что означает, что B addin всегда открывается, даже когда мы запускаем только Excel. Это нежелательно, так как B addin не может позволить пользователям работать со статическими данными, поскольку добавление B продолжает обновляться в режиме реального времени. По этой причине добавление B addin не делает запись в настройках реестра. Поэтому изменения реестра не являются вариантом. Мы всегда можем открывать B addin при открытии Excel.
4b9b3361

Ответ 1

У меня нет ответа, но вот несколько вещей, которые вы можете попробовать.

Вы можете указать, какой тип Addin вы имеете, выполнив File | Параметры и выбор вкладки Addins.

Если событие происходит, как только вы загружаете Addin B, это, вероятно, означает, что вы вызываете немодальное диалоговое окно, как оно указано, но есть несколько других вещей, которые могут дать вам подобные ошибки.

На основе вашего описания это звучит так, как ошибка может быть либо диалоговым окном в вашем Addin, либо может быть в другом аддине, и он становится вызванным как побочный эффект какого-либо изменения состояния вашего добавленного файла.

Чтобы добраться до сути, вам нужно прикрепить отладчик. Вы можете сделать это, сделав Excel своим Startup Project или связавшись позже. В этом случае первое, вероятно, проще.

  • В Visual Studio используйте Project | Недвижимость | Отладка, выберите "Запустить внешнюю программу" и введите полный путь к Excel.

  • Загрузите Addin B вручную, чтобы получить ошибку

  • Перерыв в отладчик и проверка стека вызовов.

Это часто, но не всегда дает вам хорошее представление о том, где проблема, но это всегда первый шаг. Если он не дает вам полезной информации (информация о стеках часто полностью теряется при переходе между добавками), вы можете захотеть поместить некоторые точки останова в свои проекты в любых ситуациях, которые вы обрабатываете. Даже это ненавязчиво работает все время, но это стоит того.

Если бы я должен был догадаться, я бы сказал, вероятно, есть некоторые обработчики событий в вашей надстройке, которые вызывают проблему. И вам, возможно, придется сделать что-то вроде изменения .Show в `.ShowDialog 'или отложить обработка формы до внешнего обработчика события, но это просто предположение.