プロが教える店舗&オフィスのセキュリティ対策術

今日は、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)への参照を得るにはどうしたらよいのでしょうか?

A 回答 (3件)

実際に作ってみました。



その結果、
構造上、
Excelと
VBEはそれぞれで独立した
アプリケーションだということが判明しました。

つまり
VBE上に表示されている、
Workbookは、
コードペインオブジェクト
だということです。

というわけで、
別プロセスの
アドイン(EXCEL用)を
作成したほうが
早いと思いますよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/03/09 09:16

逆に質問なんですけど、


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
は失敗します。

補足日時:2004/03/08 07:14
    • good
    • 0

あまり詳しくありませんが…



Add-In側で、
WorkBookオブジェクトを
WithEvents で宣言し、

IDE側で
set a = ThisWorkbook
ってすればいいんじゃないんでしょうか?

そういうことじゃない?

この回答への補足

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

補足日時:2004/03/07 20:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!