PowerPoint отображает ошибку «Не могу запустить приложение», когда объект диаграммы Excel встроен в него
-
25-09-2019 - |
Вопрос
Это очень распространенная проблема, когда рабочий лист или диаграмма Excel встроен в слово или PowerPoint. Я вижу эту проблему как в Word, так и PowerPoint, так и причина, по которой кажется, это COM Addin прикреплен к Excel. COM Addin написан в C # (.NET). Смотрите прикрепленные изображения для диалогов ошибок.
Я отлажил аддин и нашел очень странное поведение. Подключение (...), ondisconnection (...) методы и т. Д. В COM Addin работает нормально, пока не добавлю обработчик событий в код. Т.е. обрабатывать рабочую таблицу_sheetChange, SelectionChange или любое подобное событие, доступное в Excel. Как только добавим даже один обработчик событий (хотя мой код имеет несколько), Word и PowerPoint начнут жаловаться и не активируйте встроенный объект.
На некоторых постах в Интернете люди попросили удалить антивирусные аддукты для офиса (ни один в моем случае), так что это заставляет меня поверить, что проблема несколько связана с COM ADDINS, которые загружаются при активации приложения хоста объект.
У кого-нибудь есть идеи о том, что здесь происходит?
Обновлено 21 июня-2010
Выяснил, что оба события, так и изменения в коллекции COMADDINS создают проблемы при активации встроенного объекта. Теперь я использовал приложение Excel :: :: Свойство USERCONTROL, чтобы проверить, находится ли Excel в встроенном состоянии, а затем пропустить любую настройку (...) и код Ondisconnection (...).
Одним из решений к проблеме событий можно для перемещения всех событий уровня приложения в код VBA и вызов .NET. Тем самым удаляя все обработчики событий из .NET CODE.
Может быть еще больше сценариев, когда встроенный объект может не инициализировать, поэтому я выбираю, чтобы отключить COM Addin IE пропустить код в методах onconnection (...) и в OnDisconnection (...).
Решение
Вот что я сделал, чтобы избавиться от этой неприятной проблемы:
Удалите все обработчики событий в коде .NET и полагайтесь на события приложения VBA, то есть вместо обработки Excel :: Application :: Worksheet_Activate (...) событие, обрабатывают их в модуле VBA и вызовите в дополнение, когда событие получено Отказ Обработчики событий .NET, похоже, как-то коррумпите государство.
Отключите любой код, который взаимодействует с аддентом в настройке (...), используя флаг в пользовательском параметрах. Смотрите следующую ссылку для деталей на флаге:Com Addins подробно
Я упомянул о приложении Excel :: :: Свойство Usercontrol, но в некоторых случаях он не надежен. Нам нужно рассмотреть следующие случаи, и параметр пользовательского массива - это самостоятельно (...) является наиболее надежным:
- Excel начался как независимое приложение
- Excel начался как встроенное приложение в каком-то другом приложении
- Excel запустился через автоматизацию, например, createObject (...)
Я предпочел отключить дополнительный аддин, когда Excel находится в встроенном режиме. Это зависит от того, какой код вы выполняете в своем onconnection (...) и как другие приложения отвечают на нее при выполнении. Точка № 1 должна быть реализована для решения этой проблемы.
Если у кого-нибудь есть лучшее решение для этого, пожалуйста, дайте мне знать :)