- ベストアンサー
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)への参照を得るにはどうしたらよいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
実際に作ってみました。 その結果、 構造上、 Excelと VBEはそれぞれで独立した アプリケーションだということが判明しました。 つまり VBE上に表示されている、 Workbookは、 コードペインオブジェクト だということです。 というわけで、 別プロセスの アドイン(EXCEL用)を 作成したほうが 早いと思いますよ。
その他の回答 (2)
- kakusuke
- ベストアンサー率36% (95/259)
逆に質問なんですけど、 VBAアドインって Workbook単位でインスタンスを作成しないんですか? 1Workbookに対して1アドインだったと思いますが。
補足
たぶん、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)
あまり詳しくありませんが… Add-In側で、 WorkBookオブジェクトを WithEvents で宣言し、 IDE側で set a = ThisWorkbook ってすればいいんじゃないんでしょうか? そういうことじゃない?
補足
> IDE側で > set a = ThisWorkbook > VBA から代入するのではなく、Add-In 側から探したいです。複数のブックを開いてるときに「どのブックでクリックされたのか」を知りたいです。例えば、そのブックのプロパティを取り出したいのです。
お礼
ありがとうございます。たいへん参考になりました。 言われてみれば、この Add-In は(機能は VBE に付くのだけれども)Excel の VBE 専用になるので、それが美しいような気がしてきました。今のままだと Word VBA にも入っちゃってるし…。 次の日曜日に VBE Add-In はやめて Excel COM Add-In に挑戦してみます。