2009-10-15 37 views
10

Varios usuarios han informado que si inician Excel haciendo doble clic en un archivo de Excel, el complemento no se cargará. Pero, si abren Excel a través del menú Inicio (o la barra de herramientas de inicio rápido), el complemento carga bien.El complemento COM para Excel no se carga cuando se inicia Excel al abrir el archivo

Algunos detalles, en caso de que ayudan a:

  • Es un complemento COM, escrito en Visual Basic 6.
  • El problema se ha informado en los sistemas Windows XP/Excel 2003 y Vista/Excel 2007.
  • El complemento implementa IDTExtensibility2.
  • El modo de inicio está configurado en "Cargar al inicio".

Cualquier idea sobre la causa o cómo solucionar esto sería muy apreciada.

Actualización: Creo que he encontrado una solución a este problema.

Cuando se registra un dll IDTExtensibility2, crea automáticamente entradas HKCU para el comportamiento de la carga, el nombre del complemento, etc. Pero también hice que mi archivo de configuración registrara el complemento en HKLM, para que estuviera disponible para todos los usuarios en una máquina. Esto causó entradas dobles de registro en el sistema.

No pensé que esta sería la causa del problema. Edité manualmente las entradas HKCU y Excel pareció ignorarlas y seguir las entradas de HKLM. Sin embargo, recibí un consejo de otro desarrollador explicando que tenían el mismo problema, y ​​su solución fue eliminar las entradas de registro duplicadas. Lo intenté y parece que resolvió el problema para la (muy pequeña cantidad de) personas que informaron el error.

El siguiente código de configuración Inno agregará las entradas HKLM, verificará que el comportamiento de carga sea correcto (porque estoy paranoico), luego borrará la entrada HKCU. Sustituya los atributos de sus archivos donde quiera que vea TODOS LOS MAYÚSCULAS.

[Registry] 
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; Flags: uninsdeletekey 
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: string; ValueName: FriendlyName; ValueData: ADDIN_NAME 
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: string; ValueName: Description; ValueData: ADDIN_DESC 
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: dword; ValueName: LoadBehavior; ValueData: 3 
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: dword; ValueName: CommandLineSafe; ValueData: 0 


// Set load behavior to on start up 
procedure ResetAddinRegKeys(); 
var 
    bUpdate : Boolean; 
    LoadBehaviorKey : Cardinal; 

begin 
    if RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS', 'LoadBehavior', LoadBehaviorKey) then begin 
    if LoadBehaviorKey <> 3 then begin 
     bUpdate := True; 
    end; 
    end else begin 
    bUpdate := True; 
    end; 

    if bUpdate = True then begin 
    RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS','LoadBehavior', 3); 
    end; 

    if RegKeyExists(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS') then begin 
    if RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS') then begin; 
     //MsgBox('Duplicate keys deleted', mbInformation, MB_OK); 
    end; 
    end; 
end; 

function GetCustomSetupExitCode: Integer; 
begin 
    ResetAddinRegKeys; 
    Result := 0; 
end; 

Por mi instalador MSI, tengo la sección comprometerse de la instalación llamar a los siguientes VBScript:

Sub RemoveAddinHKCUKeys() 
    On Error Resume Next 
    Dim WshShell 
    Set WshShell = WScript.CreateObject("WScript.Shell") 

    WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\CommandLineSafe" 
    WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\Description" 
    WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\FriendlyName" 
    WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\LoadBehavior" 
    WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\" 

    If Err.Number <> 0 The Err.Clear 
End Sub 

Respuesta

3

Ha sido un largo tiempo para que mi memoria es niebla, pero sí recuerdo problemas con conseguir Complementos COM para iniciar si el host (Excel, Word) se inicia como un objeto incrustado. Es decir, tiene un documento de Word con un documento de Excel incrustado en él (realmente ve las celdas de Excel allí en Word). Cuando hace doble clic en el archivo incrustado de Excel para trabajar con él, se inicia Excel, pero Excel no carga sus complementos COM. Luego, cuando inicias Excel de otra manera, solo estás usando Excel que ya se ejecutó desde el objeto incrustado y no tendrá tus complementos COM.

Eso no parece ser su problema, pero pensé que podría gustarle algo de simpatía. ;)

¿Está utilizando el Diseñador de complementos en VB6? No he tenido problemas con eso, pero intenta eliminarlo e implementar IDTExtensibility2 directamente en una clase y luego escribir sus propias entradas de registro para registrarlo como un complemento COM. O haz esto al revés de no estar usando el diseñador.

Una cosa que debe intentar es registrar el complemento como un complemento de toda la máquina, en lugar de solo un complemento de usuario. Con el diseñador, solo puede registrarse como un complemento de usuario. (Aunque hay un trabajo alrededor para eso).

¿Lo puede reproducir? ¿Alguno de los métodos de IDTExtensibility2 se llama?

Supongo que es posible que otros complementos puedan estar interfiriendo. Puede descargar mi utilidad COM Add-In para ver qué complementos se cargan (las ventanas de complementos COM en las aplicaciones de Office solo muestran los complementos del usuario, no los complementos de la máquina)

http://www.amosfivesix.com/download/stackoverflow/

Si el complemento deja de cargarse por completo, la aplicación de Office puede haberlo deshabilitado. Ve a Ayuda | Acerca de | Artículos deshabilitados y ver si está allí.

Excel tiene algunas opciones ridículas relacionadas con DDE (que es lo que Explorer usa para abrir documentos en otras aplicaciones). Herramientas | Opciones | General | Ignora otras aplicaciones A ver si eso hace la diferencia.

Si no puede reproducir el problema, pero su cliente sí, puede escribir una versión especial para ellos que registre los eventos IDT ... para ver si están sucediendo. Envíeles una macro que compruebe Excel.Application.Addins para ver si su complemento está allí (sé que Word tiene ese modelo de objetos, no estoy seguro acerca de Excel, así que discúlpeme si no lo hace).

Espero que sea de ayuda.

-Tom

+0

@ Tom: ¿Has conseguido averiguar el problema cuando Excel está incrustado en otra aplicación? Estoy teniendo el mismo problema cuando carga mi complemento COM (que agrega su propia barra de comandos a Excel) pero la barra de comandos agregada no se puede personalizar (botones habilitados/deshabilitados) excepto en el método OnConnection(). – A9S6

+0

Lo siento, no. Esto no fue realmente un gran problema para mí. Pude decirle a la gente "no hagas eso". ;) O cierra ambas aplicaciones y comienza en el orden correcto. No estoy seguro de que haya algo que puedas hacer. Parece un error en las aplicaciones de Office. –

+0

gracias por la respuesta. Tuviste algunas buenas ideas y comentarios. – CtrlDot

3

muy fácil en 5 pasos

  1. Abra Excel
  2. Ir a Archivo> Opciones> Complementos
  3. Ir a Administrar: seleccione personas de movilidad reducida Artículos luego haga clic en Ir
  4. En ventanas nuevas Encuentra tus complementos y haga clic en Activar
  5. Reinicie Excel
Cuestiones relacionadas