PowerPoint visualizza un errore "non è possibile avviare l'applicazione" quando un oggetto grafico Excel è incorporato in esso

StackOverflow https://stackoverflow.com/questions/3003448

Domanda

Questo è un problema molto comune quando il foglio di lavoro o il grafico di Excel è incorporato in Word o PowerPoint. Sto vedendo questo problema sia in Word che in PowerPoint e nel motivo per cui sembra essere il componente aggiuntivo allegato a Excel. Il componente aggiuntivo è scritto in C# (.NET). Vedere le immagini allegate per le dialoghi di errore.

Ho debug del componente aggiuntivo e ho trovato un comportamento molto strano. I metodi OnConnection (...), Ondisconnection (...) ecc. Nell'aggiunta COM funzionano bene fino a quando non aggiungo un gestore di eventi al codice. IE gestire il worksheet_sheetchange, la selectionchange o qualsiasi evento simile disponibile in Excel. Non appena aggiungo anche un gestore di eventi singoli (anche se il mio codice ne ha diversi), Word e PowerPoint iniziano a lamentarsi e non attivano l'oggetto incorporato.

Su alcuni dei post su Internet, alle persone è stato chiesto di rimuovere i componenti aggiuntivi anti-virus per Office (nessuno nel mio caso), quindi questo mi fa credere che il problema sia in qualche modo correlato agli addini COM che vengono caricati quando l'app host si attiva l'oggetto.

Qualcuno ha idea di cosa sta succedendo qui?PowerPoint Error

Word Error

Aggiornato 21-giugno-2010


Ho scoperto che sia gli eventi che le modifiche alla raccolta COMAddins crea problemi quando l'oggetto incorporato viene attivato. Ora ho usato la proprietà Excel :: Applicazione :: UserControl per verificare se Excel è in stato incorporato e quindi saltare qualsiasi codice Onconnection (...) e Ondisconnection (...).

Una soluzione al problema degli eventi può essere quella di spostare tutti gli eventi a livello di applicazione sul codice VBA e chiamare in .NET. Rimuovendo così tutti i gestori di eventi dal codice .NET.

Potrebbero esserci ancora più scenari in cui un oggetto incorporato potrebbe non riuscire a inizializzare, quindi ho scelto di disabilitare il componente aggiuntivo IE IE saltare il codice nei metodi Onconnection (...) e Ondisconnection (...) del tutto.

È stato utile?

Soluzione

Ecco cosa ho fatto per sbarazzarmi di questo fastidioso problema:

  1. Rimuovi tutti i gestori di eventi nel codice .NET e fai affidamento sugli eventi dell'applicazione VBA, cioè invece di gestire Excel :: Applicazione :: Worksheet_Activate (...) Evento, gestiscili in un modulo VBA e chiama nel componente aggiuntivo quando viene ricevuto un evento . I gestori di eventi .NET sembrano corrompere lo stato in qualche modo.

  2. Disabilita qualsiasi codice che interagisce con il componente aggiuntivo in Onconnection (...) utilizzando il flag nel parametro personalizzato. Vedere il seguente link per i dettagli sul flag:Com aggiunte in dettaglio

Ho menzionato la proprietà Excel :: Applicazione :: UserControl ma in alcuni casi non è affidabile. Dobbiamo considerare i seguenti casi e il parametro dell'array personalizzato è onconnection (...) è il più affidabile:

  1. Excel è iniziato come applicazione indipendente
  2. Excel è iniziato come app incorporata in qualche altra applicazione
  3. Excel ha iniziato attraverso l'automazione, ad esempio createObject (...)

Ho preferito disabilitare totalmente l'addin quando Excel è in modalità incorporata. Dipende da quale codice stai eseguendo nella tua onconnection (...) e in che modo altre applicazioni rispondono quando vengono eseguite. Il punto n. 1 deve essere implementato per risolvere questo problema.

Se qualcuno ha una soluzione migliore a questo, per favore fatemelo sapere :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top