質問: 別のアプリケーションがexcelプロセスを開いたときに、excelにアドインを含むドキュメントを強制的に開くにはどうすればよいですか? matlab r2015bがexcelと対話すると、1つのexcelプロセスが開き、matlabが閉じられるまでプロセスが開いたままになります。この場合、ファイルエクスプローラーでスプレッドシートを開こうとすると、アドインが読み込まれていない状態でexcelのインスタンスでスプレッドシートが開きます。さらに、このように開かれたファイルは、自動保存されないか、終了時にユーザーに保存を求められません。スタートメニューからexcelアプリケーションを開くと、完全なexcelがすべてのアドインとともに読み込まれます。これを行った後でも、ファイルエクスプローラーで新しいファイルを開くと、アドインが無効になっているバージョンで開きます。アドインが有効になっているバージョンのexcelでファイルを強制的に開く方法はありますか?現在、office 2013、matlab r2015b、およびwindows 7を使用しています。更新:この問題の一部について、バグレポートとmatlabパッチを見つけました。ここにあります: https://www.mathworks.com/support/bugreports/1325577 。
回答: アドインの種類によって異なります。基本的に、excelアドイン(通常はvbaで記述)とcomアドインを使用できます。これらはcomを理解する任意の言語で記述できます。また、アドインがインストールされている場所によっても異なります。特定のディレクトリにあるexcelアドインは、自動的に検索して開くことができます。 excelアドインをインストールする一般的な場所は、c:\ users \\ appdata\roaming\addinsです。 excelアドインがここに保存されている場合は、excelの[ファイル]-> [オプション]-> [アドイン]タブから、または有効にしている場合は[開発者]タブから開くことができます。アドインをいずれかの場所で有効にすると、通常、excelが起動するたびに読み込まれます。comアドインは、アドインへの参照をレジストリに配置するインストーラーを使用してインストールされます。 excelは、開いたときにこれらのアドインのレジストリを検索します。上記の2つの場所には、comアドインのリストも含まれており、これらのリストから有効にできます。また、ブックにvbaからアドインを開くように強制することもできます。ブックを開くと、workbook_openという名前のルーチンが実行されます。このようなコードによっては、アドインが強制的にインストールされます。sub workbook_open() const addinname as string = "insert the name of your add-in" if not addinloaded(addinname) then if addinavailable(addinname) then on error resume next application.addins2(addinname).installed = true on error goto 0 end if end if end sub function addinavailable(addinname as string) as boolean dim ad as addin on error resume next set ad = application.addins2.item(addinname) on error goto 0 addinavailable = not ad is nothing end function function addinloaded(addinname as string) as boolean dim ad as addin, errnumber as long on error resume next set ad = application.addins2.item(addinname) errnumber = err.number on error goto 0 if not ad is nothing then if errnumber = 0 then addinloaded = ad.installed and ad.isopen end if end function