マイクロソフトExcel2013ではいろいろ変更が加えられたようですが、なかでもいちばん大きな変更は、MDIからSDIへの変更ではないかと思っています。

Excel2010までのMDI(Multi Document Interface)では、ひとつのウィンドウのなかに開いたファイルが次々と表示されましたが、Excel2013のSDI(Single Document Interface)では、ひとつのウィンドウにひとつのファイルが表示されます。

最近お客さんのところで「新しいPCを導入するんだが、Excel2010よりも価格の安くなったExcel2013を導入したい」という話があり、Excel20210で作った生産管理システムが動くか検証して欲しいとのことでした。

全く問題ないものと思っていたが、やってみると最初からつまずいてしまった。アドインメニュが表示されない。

いろいろ調べてみたが現象が発生することは出ているが解決方法がなかなか見つからない。

でふと気がついた。MDIではあるブックからコマンドバーにメニュを追加すると、すべてのブックで同じようにメニュが追加される。SDIではウィンドウが別々なので、それぞれのフィンドウに明示的に追加処理をしてやらなければいけないのではないか?

この生産管理システムでは、アドインファイルでメニュ追加の処理が実行されるが、そのメニュを表示したいのは、アドインファイルではなく別のブックなのです。

試してみたのは、以下のとおり。

--------------------------------------------------

For Each wnd In Application.Windows               '開いているすべてのブックから
  If wnd.Caption = "対象ブック" Then                'メニュを追加したいブックを探し
  wnd.Activate                            '見つかったらそのブックをアクティブにして
     Exit For                                      '終了する
  End If
Next
'アクティブなブックに対してメニュを追加する
Set myMenuBar = Application.CommandBars("Worksheet Menu Bar")
Set newmenu = myMenuBar.Controls.Add(Type:=msoControlPopup, Temporary:=True)
newmenu.Caption = [メニュ名]
With newmenu
  Set ctrl = .Controls.Add(Type:=msoControlButton)
  With ctrl
    .caption = "管理(&C)"                     'メニュバーに表示するメニュ名
    .TooltipText = ""
    .Style = msoButtonCaption
    .OnAction = "tools.openForm"         '実行する処理
    .Enabled = True
    ……

--------------------------------------------------

という簡単なものです。

これできちんとメニュが表示されました。メニュ内の処理は特に問題もなく動いています。

また、Excel2010でもこのままで動いています。