VB6/VBA COMアドインの読み込みを許可しない

私はExcelにフックしてブックをロードするVB6/VBAアプリケーションを持っています。それは長年にわたり素晴らしい仕事をしてきました。 Excel 2010にアップグレードし、いくつかの問題が発生しました。トラブルシューティングの後、PowerPivot COMアドインをオフにすると、プロセスは以前と同じように問題なく実行できます。私はこれの正確な原因を探している間、私は私のアプリのためだけにアドインをオフにすることができるかどうかを見たいと思った。私はこのようにExcelをロードする:

 Set xlApp = CreateObject("Excel.Application")
 xlApp.Visible = False

テスト用のExcelワークブックでは、このコードを使用してアドインを一覧表示します。ただし、表示されるのは「Excelアドイン」だけです。 「COMアドイン」は表示されません。

Sub ListAddIns()
  Dim CurrAddin As Excel.AddIn
  Dim r As Long
  Dim ws As Excel.Worksheet

  Set ws = ActiveSheet
  Cells.Select
  Selection.ClearContents
  Range("A1").Select

  r = 1
  For Each CurrAddin In Excel.Application.AddIns
      ws.Cells(r, 1).Value = CurrAddin.FullName
      ws.Cells(r, 2).Value = CurrAddin.Installed
      ws.Cells(r, 3).Value = CurrAddin.Name
      ws.Cells(r, 4).Value = CurrAddin.Path
      ws.Cells(r, 5).Value = CurrAddin.progID
      ws.Cells(r, 6).Value = CurrAddin.CLSID

      r = r + 1
  Next CurrAddin

  MsgBox "Its done.", vbInformation
End Sub

COMアドインを参照する方法が見つかったら、私はそれをアプリケーションのExcelオブジェクトに読み込まないようにする必要があります。助けや提案は大歓迎です。

ありがとう

3

2 答え

これを達成するための「きれいな」方法があるかどうかはわかりませんが、Excelを起動して読み込まれないようにする前に、アドインのレジストリ設定を変更するのが「汚い」方法です。 これは、HKCU \ Software \ Microsoft \ Office \ Excel \ AddIns \ LoadBehaviorを0(自動的に読み込まない)に設定することで実行できます。
ただし、これは、ユーザーが承認することを確認しない限り行わないでください。この変更に同意するかどうかをユーザーに確認してください。

あなたはコードに非常に近いので、行く方法は次のようなものです:

Sub ListAddIns()
    Dim CurrAddin As **Office.COMAddIn**
    Dim r As Long
    Dim ws As Excel.Worksheet

    Set ws = ActiveSheet
    Cells.Select
    Selection.ClearContents
    Range("A1").Select

    r = 1
    For Each CurrAddin In **Excel.Application.COMAddIns**
        ws.Cells(r, 1).Value = CurrAddin.Description
        ws.Cells(r, 2).Value = CurrAddin.Application
        ws.Cells(r, 3).Value = CurrAddin.GUID
        ws.Cells(r, 4).Value = CurrAddin.Connect
        ws.Cells(r, 5).Value = CurrAddin.Creator
        ws.Cells(r, 6).Value = CurrAddin.progID
        r = r + 1
    Next CurrAddin
    MsgBox "Its done.", vbInformation
End Sub

Connectプロパティを使用すると、COMアドインをロードおよびアンロードできます。

1
追加された
先端に感謝しますが、あなたは正しいです、それは極端です。これは内部アプリ用ですが、私はユーザーレジストリを変更することを躊躇しています。
追加された 著者 sinDizzy,
私はそれを考えていませんでした。私にそのショットをあげさせてください。
追加された 著者 sinDizzy,
OKはExcel 2007とExcel 2010でテストされ、魅力的な働きをしました。私はこのタイプのオブジェクトをどこからでも見て、それを見つけることができませんでした。助けてくれてありがとう。
追加された 著者 sinDizzy,

私は同じ問題がありますが、より簡単な解決策があります。 私はPowerpivotアドインをExcelから切り離して(解除して)、再度オンにする...問題は修正されました。

0
追加された
さて、それは明らかな答えです。ここでの全体的な考え方は、自動化され、エンドユーザーは手動で何もする必要がないということです。
追加された 著者 sinDizzy,