web-dev-qa-db-ja.com

ファイルを開いてExcelを起動すると、Excel用のCOMアドインが読み込まれません

何人かのユーザーが、ExcelファイルをダブルクリックしてExcelを起動すると、アドインが読み込まれないと報告しています。ただし、[スタート]メニュー(またはクイック起動ツールバー)からExcelを開くと、アドインは正常に読み込まれます。

それらが役立つ場合のいくつかの詳細:

  • これは、VB6で記述されたCOMアドインです。
  • この問題は、Windows XP/Excel2003およびVista/Excel2007システムで報告されています。
  • アドインはIDTExtensibility2を実装します。
  • 起動モードは「起動時にロード」に設定されています。

原因やこれをトラブルシューティングする方法についての考えは大歓迎です。

更新:私はこの問題の解決策を見つけたと思います。

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
11
CtrlDot

久しぶりなのでメモリが曇っていますが、ホスト(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についてはよくわかりません。ない場合は、ご容赦ください)。

3
Tom Winter

5つのステップで非常に簡単

  1. Excelを開く
  2. に移動 File>Options>Add-Ins
  3. 管理に移動:次に選択 Disabled Items 次にクリック Go
  4. 新しいウィンドウでアドインを見つけてクリックします Enable
  5. Excelを再起動します
2
user5110807