PowerPoint muestra un error "No se puede iniciar la aplicación" cuando un objeto de gráfico de Excel está integrado en él

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

Pregunta

Este es un problema muy común cuando la hoja de trabajo o el gráfico de Excel se incrusta en Word o PowerPoint. Estoy viendo este problema en Word y PowerPoint y la razón por la que parece que el COM suma adjunto a Excel. El complemento COM está escrito en C# (.net). Vea las imágenes adjuntas para ver los diálogos de error.

Depusgué la complicada y encontré un comportamiento muy extraño. Los métodos OnConnection (...), OnDisconnection (...) etc. en el complemento COM funcionan bien hasta que agrego un controlador de eventos al código. es decir, manejar la hoja de trabajo_sheetchange, selectionchange o cualquier evento similar disponible en Excel. Tan pronto como agrego incluso un solo controlador de eventos (aunque mi código tiene varios), Word y PowerPoint comienzan a quejarse y no activan el objeto incrustado.

En algunas de las publicaciones en Internet, se les ha pedido a las personas que eliminen los sujetos antivirus para el consultorio (ninguno en mi caso), por lo que esto me hace creer que el problema está de alguna manera relacionado con los sujetos COM que se cargan cuando la aplicación del host se activa el objeto.

¿Alguien tiene alguna idea de lo que está pasando aquí?PowerPoint Error

Word Error

Actualizado 21-junio-2010


Descubrí que tanto los eventos como los cambios en la colección Comaddins crean problemas cuando se activa el objeto integrado. Ahora he usado la propiedad de Excel :: Application :: UserControl para verificar si Excel está en estado integrado y luego omita cualquier código OnConnection (...) y OnDisconnection (...).

Una solución al problema de los eventos puede ser mover todos los eventos de nivel de aplicación al código VBA y llamar a .NET. Eliminando así todos los controladores de eventos del código .NET.

Puede haber aún más escenarios en los que un objeto incrustado podría no inicializar, por lo que elijo deshabilitar los métodos de COM, es decir, omitir el código en los métodos OnConnection (...) y Ondisconnection (...) por completo.

¿Fue útil?

Solución

Esto es lo que hice para deshacerme de este molesto problema:

  1. Elimine todos los controladores de eventos en el código .NET y confíe en los eventos de la aplicación VBA, es decir, en lugar de manejar Excel :: Application :: Worksheet_Activate (...) Evento, manejalos en un módulo VBA y llame al complemento cuando se recibe un evento . Los manejadores de eventos .NET parecen corromper el estado de alguna manera.

  2. Deshabilite cualquier código que interactúe con el complemento en OnConnection (...) usando el indicador en parámetro personalizado. Consulte el siguiente enlace para obtener detalles sobre la bandera:COM ADRIMIENTOS EN DIARTA

Mencioné sobre la propiedad de Excel :: Application :: UserControl, pero no es confiable en algunos casos. Necesitamos considerar los siguientes casos y el parámetro de matriz personalizado es OnConnection (...) es el más confiable:

  1. Excel comenzó como aplicación independiente
  2. Excel comenzó como aplicación integrada en alguna otra aplicación
  3. Excel comenzó a través de la automatización, por ejemplo, createObject (...)

Preferí deshabilitar el complemento totalmente cuando Excel está en modo incrustado. Depende del código que esté ejecutando en su OnConnection (...) y cómo otras solicitudes responden cuando se ejecuta. El punto #1 debe implementarse para resolver este problema.

Si alguien tiene una mejor solución a esto, hágamelo saber :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top