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
@ 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
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. –
gracias por la respuesta. Tuviste algunas buenas ideas y comentarios. – CtrlDot