• ベストアンサー

VBA IDE Add-In

今日は、Visual Basic 6 で、VBA IDE の Add-In を書いてます。新しいプロジェクトで「アドイン」を選んで、Connect.dsr を Visual Basic for Application IDE にして、Excel の VBA IDE の Code Window の右クリックに自分の WithEvents Office.CommandBarButton を追加しました。 これの Click イベントハンドラで、その場所の VBA が属している Workbook(ThisWorkbook)への参照を得るにはどうしたらよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.3

実際に作ってみました。 その結果、 構造上、 Excelと VBEはそれぞれで独立した アプリケーションだということが判明しました。 つまり VBE上に表示されている、 Workbookは、 コードペインオブジェクト だということです。 というわけで、 別プロセスの アドイン(EXCEL用)を 作成したほうが 早いと思いますよ。

jmh
質問者

お礼

ありがとうございます。たいへん参考になりました。 言われてみれば、この Add-In は(機能は VBE に付くのだけれども)Excel の VBE 専用になるので、それが美しいような気がしてきました。今のままだと Word VBA にも入っちゃってるし…。 次の日曜日に VBE Add-In はやめて Excel COM Add-In に挑戦してみます。

その他の回答 (2)

  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.2

逆に質問なんですけど、 VBAアドインって Workbook単位でインスタンスを作成しないんですか? 1Workbookに対して1アドインだったと思いますが。

jmh
質問者

補足

たぶん、1つの VBE に1つです。初めて VBE が現れるときに生成されます。本体の Excel が終了するときに破壊されます。同じ Excel で新しいブックを作成しても、Add-In は生成されません。Excel をもう1つ起動して VBE を起動すると、新しい Add-In が生成されます。 CommandBarButton.Click ハンドラにブレークポイントを置いて、ここで OnConnection の時に保存しておいた Application As VBE をデバッグのローカルウィンドウで見てみると、.SelectedVBComponent.Name が "ThisWorkbook" なのですが、これは As VBComponent で、  Dim a As Excel.Workbook  Set a = .SelectedVBComponent は失敗します。

  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.1

あまり詳しくありませんが… Add-In側で、 WorkBookオブジェクトを WithEvents で宣言し、 IDE側で set a = ThisWorkbook ってすればいいんじゃないんでしょうか? そういうことじゃない?

jmh
質問者

補足

> IDE側で > set a = ThisWorkbook > VBA から代入するのではなく、Add-In 側から探したいです。複数のブックを開いてるときに「どのブックでクリックされたのか」を知りたいです。例えば、そのブックのプロパティを取り出したいのです。

関連するQ&A