アドインのコマンド バーは、アドインの読み込みまたはアンロード時に Excel 2013 以降では表示または削除されません。

注意

Office 365 用リソース は、 エンタープライズ向け Microsoft 365 アプリに名前変更されています。 この変更の詳細については、 このブログの投稿を参照してください。

現象

Microsoft Excel 2013 以降でアドインを使用すると、次の問題が発生します。

問題 1

Excel アドイン (xlam) または Excel 97-2003 アドイン (xla) を読み込む場合、アドインのコマンド バーは自動的には表示されません。 代わりに、すべてのブックを閉じてから Excel を再起動してコマンド バーを表示する必要があります。

問題 2

Excel アドイン (.xlam) または Excel 97-2003 アドイン (.xla) をアンロードするか、コマンド バーを含む Excel マクロ対応ブック (.xlsm) を閉じると、アドインのコマンド バーまたはマクロが有効なブックは開いているすべてのブックから削除されません。

原因

これらの問題は、Excel 2013 以降の単一ドキュメント インターフェイス (SDI) のために発生します。 従来の CommandBar オブジェクトを使用してメニュー項目を作成すると、メニュー項目がリボンの [Add-Ins] タブに追加されます。 Excel 2013 以降では、各ブックには独自のリボンがあります。 そのため、ブックのリボンの作成後にアドインを読み込みまたはアンロードすると、リボンは更新されません。

次のコード サンプルでは、CommandBar オブジェクトを使用してメニュー項目を作成します。

Application.CommandBars("Worksheet Menu Bar").Controls.Add Type:=msoControlPopup

回避策

問題 1 を回避するには、開いているブックをすべて閉じてから Excel を再起動します。

問題 2 を回避するには、次のいずれかの方法を使用します。

  • アドインまたはマクロが有効なブックのコマンド バーをリボン (XML) アイテムに置き換えてください。 リボン (XML) の詳細については、「リボン XML」 を参照してください

  • アドインまたはWorkbook_BeforeClose有効なブックのイベントで、開いているすべてのウィンドウをループ処理し、コマンド バーを削除します。 コード サンプルを次に示します。

    For Each wnd In Application.Windows
            wnd.Activate
            Application.CommandBars("<ToolbarName>").Delete
    Next wnd
    

注意

このコードでは 、ToolbarName <プレースホルダー> コマンド バー名を表します。