2011-08-11 18 views
3

Excel 2010アドインを動的に読み込むときは、ワークブックに読み込まれた後で、新しく追加されたアドインを含むようにVBA参照を変更する必要があります。実行時(アドインのランタイム読み込み後)にExcel VBA参照を変更することは可能ですか?

このコードは、プログラムでアドインを読み込むために働く:

Function LoadAddin(strFilePath As String) As Boolean 
    ' Checks whether add-in is in collection, and 
    ' then loads it. To call this procedure, pass 
    ' in add-in's path and file name. 

    Dim addXL   As Excel.AddIn 
    Dim strAddInName  As String 

    On Error Resume Next 
    ' Call ParsePath function to return file name only. 
    'strAddInName = ParsePath(strFilePath, FILE_ONLY) 'not available in VBA...so it seems to always physically load it below, which seems to work fine. 
    ' Remove extension from file name to get add-in name. 
    strAddInName = Left(strAddInName, Len(strAddInName) - 4) 
    ' Attempt to return reference to add-in. 
    Set addXL = Excel.AddIns(strAddInName) 
    If err <> 0 Then 
     err.Clear 
     ' If add-in is not in collection, add it. 
     Set addXL = Excel.AddIns.Add(strFilePath) 
     If err <> 0 Then 
     ' If error occurs, exit procedure. 
     LoadAddin = False 
     GoTo exit_function 
     End If 
    End If 
    ' Load add-in. 
    If Not addXL.Installed Then addXL.Installed = True 
    LoadAddin = True 

exit_function: 
    Exit Function 
End Function 

ので、新たに含まれ、この中にVBAを指し、ホストスプレッドシート内のVBAコードを追加して、今の参照にこれを追加する方法があります-Inは正しく実行されますか?

どこへ行くルートはのようなものかもしれないと表示されます。

ThisWorkbook.VBProject.References.AddFromFile ("C:\MyFiles\MyAddin.xlam") 

...しかし、これは私にエラーを与える:

Microsoft Visual Basic for Applications 
Run-time error '32813': 
Application-defined or object-defined error 
+0

ホストプロジェクトは、アドインの手順への早期バインド参照を持っている場合は既存の参照はありませんならば、あなたはコンパイルエラーを取得することがありますが、実際には他を参照するコードを呼び出すまで、これらのエラーは常に待機していませんプロジェクト... –

+0

@Tim:これを回避するには、Workbook_Open()で最初に負荷を呼び出すことが必要です。ただし、スプレッドシートが開いているときに計算が自動の場合は問題になる可能性があります。おそらくどこかでエラーハンドラに読み込むことができます.... – tbone

+2

[オプション]の下で[VBProjectへの信頼アクセス]チェックボックスをオンにしましたか?また、VBE拡張ライブラリへの参照を追加しましたか? –

答えて

0

あなたは同じコードを使用して考えられて(ややありアドインのワークブック公開イベントで変更されましたか?

私はあなたを正しく理解すれば、これはあなたが望むものだと思いますか?

Public ShouldIContinue As Boolean 

Private Sub Workbook_Open() 
    '~~> This is required to avoid the endless loop 
    If ShouldIContinue = True Then Exit Sub 

    Dim addXL As AddIn 
    Dim strAddInName As String 
    Dim oTempBk As Workbook 

    strFilePath = ThisWorkbook.FullName 

    strAddInName = ThisWorkbook.Name 
    '~~> This will work for both .xla and .xlam 
    strAddInName = Left(strAddInName, (InStrRev(strAddInName, ".", -1, _ 
    vbTextCompare) - 1)) 

    On Error Resume Next 
    Set addXL = Excel.AddIns(strAddInName) 
    On Error GoTo 0 

    If Not addXL Is Nothing Then Exit Sub 

    '~~> This is required to avoid the Run-time error '1004': 
    '~~> "Unable to get the Add property of the AddIns class" 
    '~~> OR 
    '~~> "Add method of addins class failed" 
    '~~> when there are no workbooks 
    Set oTempBk = Workbooks.Add 

    Set addXL = AddIns.Add(strFilePath, True) 
    addXL.Installed = True 

    oTempBk.Close 

    ShouldIContinue = True 
End Sub 
+0

これは正しかったかもしれませんが、この問題に戻ったときに私はここに戻り、問題が解決した場合は正しいとマークします。ありがとう。 – tbone

関連する問題