1

IDE アドインは VB6 で作成され、VB6、Excel、Access などを対象として
います。 Application&AddInInstパラメータを調べて、初期プロシージャに渡します:

Private Sub AddinInstance_OnConnection( _
    ByVal Application As Object, _ 
    ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
    ByVal AddInInst As Object, _
    custom() As Variant) 

明示的なホスト値が見つかりません。ホストへの参照はどこで取得できますか?
.

4

1 に答える 1

2

ホストは VBIDE オブジェクト モデルによって明示的に公開されませんが、ホストへの参照を取得する方法はいくつかあります。

  1. vbProject の参照を調べます。ホスト参照は通常、プロジェクトの 2 番目の参照になります。参照の名前がわかったら、 で使用する文字列を作成できますGetObject。問題は、VBProject が読み込まれていない場合、またはプロジェクトが保護されている場合、このメソッドが機能しないことです。

  2. VBE の標準 CommandBar の最初のボタンのキャプションを調べます。これは、Excel の場合は「View Microsoft Excel (Alt+F11)」です。ホストの名前がわかったら、で使用する文字列を作成できますGetObject

  3. Properties collection of a vbComponent such asThisWorkbook` を使用して、アプリケーションへの参照を返します。このアプローチは、プロジェクトにドキュメント タイプの vbComponent がある場合にのみ機能します。PowerPoint や Access などのホストには、必ずしもドキュメント タイプのコンポーネントがあるとは限りません。このアプローチでは、少なくとも 1 つのプロジェクトが開いていて、保護されていないことも必要です。

    Dim app As Excel.Application
    Set app = _vbe.ActiveVBProject.VBComponents("ThisWorkbook").Properties("Parent").Object
    
  4. Accessibility ( GetAccessibleObject) を使用して、VBE の ProcessID (VBE の Hwnd から取得できます) からホストのハンドルを取得します。詳細については、以下の問題リンクを参照してください。

ラバーダックは、VBE 用の C# アドインで複数のホストに対して同じことを行う必要がありました。GitHubのソース コードを見てください。ここと、この関連する問題も参照してください。

于 2016-08-22T23:36:12.190 に答える