何人かのユーザーが、ExcelファイルをダブルクリックしてExcelを起動すると、アドインが読み込まれないと報告しています。ただし、[スタート]メニュー(またはクイック起動ツールバー)からExcelを開くと、アドインは正常に読み込まれます。
それらが役立つ場合のいくつかの詳細:
原因やこれをトラブルシューティングする方法についての考えは大歓迎です。
更新:私はこの問題の解決策を見つけたと思います。
IDTExtensibility2 dllが登録されると、ロード動作やアドイン名などのHKCUエントリが自動的に作成されます。ただし、セットアップファイルでアドインをHKLMに登録して、すべてのユーザーが使用できるようにしました。機械。これにより、システムに二重のレジストリエントリが発生しました。
これが問題の原因になるとは思いませんでした。 HKCUエントリを手動で編集しましたが、Excelはそれらを無視し、HKLMエントリに従うようでした。しかし、別の開発者から同じ問題があることを説明するヒントを受け取りました。彼らの解決策は、重複するレジストリエントリを削除することでした。私はそれを試しましたが、バグを報告した(非常に少数の)人々の問題は解決したようです。
以下のInnoSetupコードは、HKLMエントリを追加し、ロード動作が正しいことを再確認してから(私は妄想的であるため)、HKCUエントリを削除します。すべて大文字で表示されている場合は、ファイル属性を置き換えてください。
[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;
MSIインストーラーの場合、インストールのコミットセクションで次の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
久しぶりなのでメモリが曇っていますが、ホスト(Excel、Word)を埋め込みオブジェクトとして起動した場合にCOMアドインを起動する際の問題を思い出します。つまり、Excelドキュメントが埋め込まれたWordドキュメントがあります(実際には、WordにExcelセルが表示されます)。埋め込まれたExcelファイルをダブルクリックして操作すると、Excelが起動しますが、ExcelはCOMアドインをロードしません。次に、他の方法でExcelを起動すると、実際には、埋め込みオブジェクトから実行されていた、または既に実行されているExcelを使用しているだけで、COMアドインはありません。
それはあなたの問題ではないようですが、私はあなたがいくつかの同情を好むかもしれないと思いました。 ;)
VB6でアドインデザイナを使用していますか?問題はありませんが、それを破棄してIDTExtensibility2をクラスに直接実装してから、独自のレジストリエントリを書き込んでCOMアドインとして登録してみてください。または、デザイナーを使用していない場合は、これを逆に行ってください。
試してみる1つのことは、アドインを単なるユーザーアドインではなく、マシン全体のアドインとして登録することです。デザイナでは、ユーザーアドインとしてのみ登録できます。 (そのための回避策はありますが)。
再現できますか? IDTExtensibility2メソッドのいずれかが呼び出されていますか?
他のアドインが干渉している可能性があると思います。 COMアドインユーティリティをダウンロードして、読み込まれているアドインを確認できます(OfficeアプリのCOMアドインウィンドウには、ユーザーアドインのみが表示され、マシンアドインは表示されません)。
http://www.amosfivesix.com/download/stackoverflow/
アドインの読み込みが完全に停止した場合は、Officeアプリによって無効になっている可能性があります。ヘルプに移動|について|無効にされたアイテムとそれがそこにあるかどうかを確認します。
Excelには、DDE(Explorerが他のアプリでドキュメントを開くために通常使用するもの)に関連するいくつかの間抜けなオプションがあります。オプション|一般|他のアプリケーションは無視してください。それが違いを生むかどうかを確認してください。
問題を再現できないが、クライアントは再現できる場合は、IDT ...イベントをログに記録して、それらが発生しているかどうかを確認する特別なバージョンを作成できます。 Excel.Application.Addinsをチェックして、アドインが存在するかどうかを確認するマクロを送信します(Wordにはそのオブジェクトモデルがあることはわかっていますが、Excelについてはよくわかりません。ない場合は、ご容赦ください)。
5つのステップで非常に簡単