Powerpoint отображает ошибку «не удается запустить приложение», когда в него встроен объект Excel Chart - PullRequest
1 голос
/ 09 июня 2010

Это очень распространенная проблема, когда лист Excel или диаграмма встроены в Word или Powerpoint.Я вижу эту проблему как в Word, так и в Powerpoint, и причина, по-видимому, заключается в том, что надстройка COM прикреплена к Excel.Надстройка COM написана на C # (.NET).Смотрите прикрепленные изображения для диалогов об ошибках.

Я отладил надстройку и обнаружил очень странное поведение.Методы OnConnection (...), OnDisConnection (...) и т. Д. В надстройке COM работают нормально, пока я не добавлю обработчик событий в код.т.е. обрабатывать Worksheet_SheetChange, SelectionChange или любое подобное событие, доступное в Excel.Как только я добавляю хотя бы один обработчик событий (хотя в моем коде их несколько), Word и Powerpoint начинают жаловаться и не активируют встроенный объект.

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

У кого-нибудь естьПонятие о том, что здесь происходит? Ошибка PowerPoint http://www.freeimagehosting.net/uploads/d687736c66.png

Ошибка слова http://www.freeimagehosting.net/uploads/f72b99bc25.png

ОБНОВЛЕНО 21-ОЕ ИЮНЯ-2010


Обнаружено, что и события, и измененияв коллекцию ComAddIns создает проблемы при включении встроенного объекта.Теперь я использовал свойство Excel :: Application :: UserControl, чтобы проверить, находится ли Excel во встроенном состоянии, а затем пропустить любой код OnConnection (...) и OnDisconnection (...).

Одно решение для событийпроблема может быть в том, чтобы переместить все события уровня приложения в код VBA и вызвать в .NET.Таким образом, удаляются все обработчики событий из кода .NET.

Могут быть и другие сценарии, в которых встроенный объект может не инициализироваться, поэтому я решил отключить надстройку COM, т.е. пропустить код в OnConnection (...) иМетоды OnDisconnection (...) в целом.

1 Ответ

0 голосов
/ 30 августа 2010

Вот что я сделал, чтобы избавиться от этой надоедливой проблемы:

  1. Удалите все обработчики событий в коде .NET и положитесь на события приложения VBA, т. Е. Вместо обработки события Excel :: Application :: Worksheet_Activate (...), обработайте их в модуле VBA и вызовите надстройка, когда событие получено. Кажется, что обработчики событий .NET как-то портят состояние.

  2. Отключить любой код, который взаимодействует с надстройкой в ​​OnConnection (...), используя флаг в пользовательском параметре. Смотрите следующую ссылку для получения подробной информации о флаге: COM-надстройки в деталях

Я упоминал о свойстве Excel :: Application :: UserControl, но в некоторых случаях оно ненадежно. Нам нужно рассмотреть следующие случаи, и пользовательский параметр массива OnConnection (...) является наиболее надежным:

  1. Excel запущен как самостоятельное приложение
  2. Excel запускается как встроенное приложение в каком-то другом приложении
  3. Excel запускается с помощью автоматизации, например CreateObject (...)

Я предпочел полностью отключить надстройку, когда Excel находится во встроенном режиме. Это зависит от того, какой код вы выполняете в OnConnection (...) и как другие приложения реагируют на него при выполнении. Точка № 1 должна быть реализована для решения этой проблемы.

Если у кого-то есть лучшее решение для этого, пожалуйста, дайте мне знать:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...