it-swarm-ja.com

別のアプリケーションが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

3
John

アドインの種類によって異なります。基本的に、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
3
Pitaq