2011-12-14 17 views
12

Il mio add-on Excel (XLL AddIn, chiamalo MyAddIn) è costruito con C#, ExcelDNA, NetOffice, VS2010. Il client ha un altro addin (chiamiamolo B), immagino sia scritto in VBA. Il client dice che B funziona correttamente senza MyAddIn. Una volta MyAddIn è installato, B fallisce con l'errore:Errore Excel 406 quando si utilizzano sia componenti aggiuntivi VBA che ActiveX.

Error code: 406 Error message: Non-modal forms cannot be displayed in this host application from an ActiveX DLL, ActiveX Control, or Property Page.

ho visto this Microsoft resource, ma io non voglio dire solo il cliente che B Addin esigenze. Voglio fare qualcosa per evitare questo dalla mia parte.

Ecco i passi riportati di vedere la questione:

  1. Quando viene installato B Addin, non fa alcuna voce di registro per il Microsoft Excel.
  2. Quando MyAddin è installato, crea una voce di registro per Microsoft Excel.
  3. Le voci del Registro di sistema in questo caso indicano che l'addin deve essere aperto quando viene avviato Excel, pertanto l'addin B non viene avviato, Excel funziona correttamente, MyAddIn funziona correttamente.
  4. Ora, quando viene avviato l'addin B, viene visualizzato l'errore 406 mostrato sopra.
  5. Possiamo ignorare l'errore e continuare a lavorare con l'addin B; disabilitazione MyAddIn è la soluzione alternativa.
  6. Quando viene avviato l'addin B, vediamo che MyAddIn viene caricato prima dell'aggiunta di B e quindi viene visualizzato l'errore 406.
  7. Quando disinstalliamo MyAddIn, questo errore non si verifica più e tutto funziona correttamente.
  8. Per rimuovere questo errore, abbiamo provato a modificare l'ordine del registro per rendere l'addin B sempre aperto prima MyAddin.
    • Questo funziona, ma poi questo è un cambiamento globale per Microsoft Excel, il che significa B Addin sarà sempre aperta, anche quando lanciamo solo Excel. Questo non è desiderato, poiché l'addin B non può consentire agli utenti di lavorare con i dati statici mentre l'addin B continua ad aggiornarsi in tempo reale. Questo è il motivo per cui l'addin B non crea una voce nelle impostazioni del registro. Quindi le modifiche al registro non sono un'opzione. Non è sempre possibile aprire B addin ogni volta che Excel è aperto.
+1

Come menzionato nel messaggio di errore, MyAddIn sta tentando di visualizzare un modulo non modale, causando il problema. Hai bisogno di capire di che forma si tratta. Sarebbe anche d'aiuto se potessi pubblicare del codice. – Tarik

risposta

1

Non ho una risposta, ma qui ci sono un paio di cose che si possono provare.

È possibile determinare quale tipo di componente aggiuntivo si sta utilizzando eseguendo il file | Opzioni e selezionando la scheda Addins.

Se l'evento si verifica non appena si carica Addin B, probabilmente significa che si sta chiamando una finestra di dialogo non modale come indicato, ma ci sono alcune altre cose che potrebbero darti errori simili.

Sulla base della descrizione, sembra che l'errore potrebbe essere una finestra di dialogo nel componente aggiuntivo, oppure potrebbe essere nell'altro componente aggiuntivo e viene chiamato come effetto collaterale di alcune modifiche dello stato apportate dal componente aggiuntivo.

Per arrivare alla fine di esso, è necessario allegare un debugger. Puoi farlo facendo di Excel il tuo progetto di avvio, o allegando in seguito. Il primo è probabilmente più facile in questo caso.

  1. In Visual Studio, utilizzare Progetto | Proprietà | Eseguire il debug, selezionare Avviare il programma esterno e inserire il nome percorso completo in Excel.

  2. carico Addin B manualmente per darti l'errore

  3. passare al debugger ed esaminare lo stack di chiamate.

Questo spesso, ma non sempre, ti dà un buon indizio su dove si trova il problema, ma è sempre il primo passo. Se non ti fornisce informazioni utili (le informazioni sullo stack vengono spesso completamente perse nelle transizioni tra i componenti aggiuntivi), potresti voler inserire dei punti di interruzione nei tuoi progetti in qualsiasi evento che gestisci. Anche questo non funziona in modo affidabile tutto il tempo, ma vale la pena provare.

Se dovessi indovinare, direi che probabilmente hanno nel tuo componente aggiuntivo alcuni gestori di eventi che stanno causando il problema, e potresti dover fare qualcosa come cambiare un .Show in un `.ShowDialog 'o differire il elaborazione del modulo fino all'esterno del gestore eventi, ma è solo un'ipotesi.

Problemi correlati