• ベストアンサー

エクセルVBAについてです。

マクロが何も組み込まれていないワークブックAの Thisworkbookに「Workbook_SheetActivate」 イベントを追加する方法を考えています。 マクロが組み込まれているワークブックBのモジュールを ワークブックAにコピーする方法は下記のサイトで見つける ことができました。 http://officetanaka.net/excel/vba/vbe/07.htm しかし、モジュールの追加はできても、Thisworkbookに 追加する方法はわかりませんでした。 何か良い方法はないでしょうか?

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#2です。 XL2010,WindowsXP Home SP3の環境では動作いたしました。 参考URLの怪しげな日本語を読む限りは、2007でも問題なくできそうなものですが、2007環境は持っておりませんので、検証できません。 あしからず。

参考URL:
http://support.microsoft.com/kb/213566/ja
machine_angel
質問者

お礼

うまくいきました。 1度、ファイルを閉じていなかったので オープンイベントが走らせていませんでした。 これで、私のやりたいことが解決できそうです。 ありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

すでに、一般的な方法は私が以下で書いています。 http://okwave.jp/qa/q6371499.html 今のところ、私の回答の4件中、4件すべて無視しているようですが、私の回答は期待はずれかな? それとも、分からないのかな?分からないなら、どうしうもないですが、ある程度の常識的な対応は示してくださいね。 OfficeTanakaの内容を参考にしても、 >ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule こういうコードは今は書きません。 ただ、あえて書くなら、.DeleteLines の反対は、.InsertLines です。 .InsertLines 行数, "コード" 田中という人は、どういうつもりで書いているか知りませんが、知っていればなんでもありというものでもありません。Microsoft Visual Basic for Applications Extensibility を参照設定すればよいということでなくて、やはり、それにふさわしいものがあるのですが。

machine_angel
質問者

お礼

失礼しました。 やっとWendy02さんの言ってることを理解できるところまで きたところです。 いつも参考にさせていただき、とても助かっております。 またよろしくお願いします。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

代替案です。 マクロが組み込まれているワークブックBのThisworkbookモジュールに下記コードを記述します。 'Aのところで、Activateされたブック名、シート名が取得できますので、Aブックだったらどんな操作をするという記述をすれば、良いと存じますが、いかがでしょうか。 Private WithEvents myExcel As Application 'A Private Sub myExcel_SheetActivate(ByVal Sh As Object) MsgBox "[" & Sh.Parent.Name & "]" & Sh.Name End Sub Private Sub Workbook_Open() Set myExcel = Application End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Set myExcel = Nothing End Sub

machine_angel
質問者

お礼

エクセル自体にイベントを持たせる。 とても良い方法ですね。 実際に、BookB.xlsmに上記のコードを記述し、 何もマクロをくみこんでないBookA.xlsxを用意して 2つのブックを開いて試してみました。 しかし、myExcel_SheetActivateがうまく拾えていませんでした。 どこか悪いところあるのでしょうか? それともExcel2007が問題なのでしょうか?

回答No.1

こんばんは。 そういうことは普通はしないものです。 なぜ、そんな必要があるのかを明示すれば 代替案があるかも知れません。

machine_angel
質問者

お礼

回答ありがとうございます。 マクロが組み込まれていないワークブックAには 仮にワークシートが3つあったとします。 (本来は、シート数は可変です。) そのシートのうち、セルA1に「テスト」と書込まれていたら メッセージ「A1にテストが書込まれています。」 と表示したいと考えています。 人によって、どのシートのセルA1に「テスト」と書き込むか わからないため、ThisWorkbookのWorkbook_SheetActivateを追加 できれば、そのシートのA1には「テスト」が入力されているか、 という判断ができるのでは、と考えたからです。 ワークブックAには、パソコンの初心者が開くと考えるので VBEを開いて、ThisWorkbookにWorkbook_SheetActivateを 追加して下さいって言えないので、こちらから自動的に 追加してあげたいと思って、今回の質問にいたりました。

関連するQ&A