2010-06-09 21 views
1

Il s'agit d'un problème très courant lorsque la feuille de calcul ou le graphique Excel est incorporé dans Word ou PowerPoint. Je vois ce problème à la fois dans Word et Powerpoint et la raison pour laquelle il semble que l'addin COM est attaché à Excel. L'addin COM est écrit en C# (.NET). Voir les images jointes pour les boîtes de dialogue d'erreur. J'ai débogué l'addin et ai trouvé un comportement très étrange. Les méthodes OnConnection (...), OnDisConnection (...) etc dans l'addin COM fonctionne bien jusqu'à ce que j'ajoute un gestionnaire d'événement au code. c'est-à-dire gérer le Worksheet_SheetChange, SelectionChange ou tout événement similaire disponible dans Excel. Dès que j'ajoute un seul gestionnaire d'événement (bien que mon code en ait plusieurs), Word et Powerpoint commencent à se plaindre et n'activent pas l'objet incorporé. Sur certains des postes sur Internet, on a demandé aux gens de supprimer les addins antivirus pour le bureau (aucun dans mon cas), ce qui me fait croire que le problème est lié aux addins COM qui sont chargés quand l'application hôte active l'objet.Powerpoint affiche une erreur «impossible de démarrer l'application» lorsqu'un objet graphique Excel est incorporé

Est-ce que quelqu'un a une idée de ce qui se passe ici? PowerPoint Error http://www.freeimagehosting.net/uploads/d687736c66.png

Word Error http://www.freeimagehosting.net/uploads/f72b99bc25.png

MISE À JOUR 21 JUIN 2010


a découvert que les événements et les changements à la collecte COMAddIns crée des problèmes lorsque l'objet intégré est activé. J'ai maintenant utilisé la propriété Excel :: Application :: UserControl pour vérifier si Excel est dans l'état incorporé, puis ignorer tout code OnConnection (...) et OnDisconnection (...).

Une solution au problème d'événements peut être de déplacer tous les événements de niveau application vers le code VBA et d'appeler .NET. Ainsi, tous les gestionnaires d'événements sont supprimés du code .NET.

Il peut y avoir encore plus de scénarios dans lesquels un objet incorporé peut échouer à l'initialisation, donc je choisis de désactiver COM addin, c'est-à-dire ignorer le code dans les méthodes OnConnection (...) et OnDisconnection (...).

Répondre

0

Voici ce que je l'ai fait pour se débarrasser de ce problème gênant:

  1. Retirez tous les gestionnaires d'événements dans le code .NET et compter sur les événements d'application VBA-à-dire au lieu de la manipulation Excel :: application :: Événement Worksheet_Activate (...), manipulez-les dans un module VBA et appelez l'addin lorsqu'un événement est reçu. Les gestionnaires d'événements .NET semblent corrompre l'état en quelque sorte.

  2. Désactiver tout code qui interagit avec l'add-in dans OnConnection (...) en utilisant l'indicateur dans param personnalisé. Voir le lien suivant pour plus de détails sur le drapeau: COM AddIns in Detail

je l'ai mentionné au sujet de la propriété Excel :: :: UserControl application mais il n'est pas fiable dans certains cas. Nous devons considérer les cas suivants et le tableau personnalisé PARAM est OnConnection (...) est la plus fiable:

  1. Excel a commencé comme application indépendante
  2. Excel a commencé comme application embarquée dans une autre application
  3. Excel a commencé par l'automatisation par exemple CreateObject (...

Je préférais désactiver complètement l'addin quand Excel est en mode embarqué. Cela dépend du code que vous exécutez dans votre OnConnection (...) et de la manière dont les autres applications y répondent lors de l'exécution. Le point # 1 doit être implémenté pour résoudre ce problème.

Si quelqu'un a une meilleure solution à cela, s'il vous plaît faites le moi savoir :)