• ベストアンサー

エクセル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

  • EXCEL VBAで

    VBA初心者です 簡単過ぎる質問で申し訳ありませんが 調べてみても分からなかったので質問さしてもらいます VBEの標準モジュール1で簡単なプログラムを作成しました デバッグツールバーから実行をすると プログラム通り、動作はしましたが・・・ VBE画面を閉じてからの、プログラムを実行する方法が分かりません 右上の×を押しの、プログラム実行です 作ったプログラムを動作しようと思って 開発→マクロを押しても、作ったマクロ名が表示されないです どのようにしたら、標準モジュールで作ったマクロが、表示されるようになりますか?

  • エクセルVBAでVBAの修正は出来るのでしょうか?

    エクセルVBAでVBAの修正は出来るのでしょうか? あるエクセルファイルにマクロを組み込んでいます(ユーザーフォームも使用)。 このエクセルファイルを複数個フォルダ内にコピーしています。 このコピーした全てのファイルのマクロの修正をVBAで出来ないかと考えています。 修正箇所はモジュール内のコード修正、モジュールの追加、既存のユーザーフォームにボタン等の追加等です。 エクセルは2003を使用しています。 どなたか教えてください。

  • Excel VBA 標準モジュール内でイベント

    ワークブックのイベントWorkbook_Openを標準モジュールのAuto_Openで代用できるように ワークシートのイベントWorksheet_Changeを標準モジュールで実行できるようにすることは できなものでしょうか。 その他のイベントに関しても情報があれば教えてください。

  • Excel95のイベントについて

    またまた、Excel95についてなのですが、 ワークブックをアクティブにしたときに発生するイベントは あるのでしょうか? 97以降のものなら Workbook_Activate でできたのですが、 95のやり方がわからなくて…。 それに代わるイベント・方法でも構いませんので、 ご教授願います。

  • VBAでのマクロの削除方法について教えてください。

    ACCESS2000のVBAから、excelのThisWorkbookに書かれたVBAマクロ「Sub Workbook_BeforeSave」を削除したいのですが、うまくいきません。どなたか方法を教えてください。よろしくお願いいたします。

  • EXCEL97のVBAのトラブル

    EXCEL97のVBAで誤ったプログラミングをしたため、 大切なファイルが開けなくなってしまいました。 "Private Sub Workbook_Open()"のところです。 Sheetが開ければ、他はすべて消えても構わないのですが、 なにか開く方法はないでしょうか? 強制終了になってしまいます。詳細には "EXCEL のページ違反です。 モジュール : EXCEL.EXE、アドレス : 0137:3009a7fd・・・"と出ます。

  • エクセル2000VBAでファイルを操作したい

    いつもお世話になっています。 エクセルVBAで別のワークブックを参照したいので workbooks.open Filename:="C:my documents\***.xls" とすると、そのオープンするワークブックのTisWorkbookのWorkbook_Open()で実行している(.show)メニュー(ユーザーフォーム)が開いてしまいます。 このとき、Workbook_Open()を実行させないでワークブックを開く方法って、 なにかありますか? Shiftを押しながらファイルを開くとき、実行されませんよね?それをVBAでできるのですか? よろしくお願いします。

  • Excel 2003のVBAマクロデータをExcel 2007で見たい

    Excel 2003のVBAマクロデータをExcel 2007で見たい。 Excel 2003でVBAマクロを登録したExcelファイルがありますが、今回、Excel 2007をインストールして、該当ファイルを開いたところ、「マクロデータを削除しました。」とメッセージが出て、VBEを起動してもマクロが見えなくなりました。OSはWindowsXP SP3です。Excel 2003で登録したVBAマクロをExcel 2007で削除されないで、次の2点について、可能にするにはどうすればよいか、ご教示願います。 (1)マクロデータを残す方法。 (2)マクロ起動する方法。

  • Excel VBAでブックを閉じる時、複数のブックが開いていると・・・。

    WinXP+Excel2002なのですが、 ExcelのVBAでつくったアプリの中に、 Application.Quit ThisWorkbook.Close False と記述し、終了させる部分があります。 複数のブックが開いているときにこのプログラムを実行すると、 他のブックまで閉じようとするのですが、 これは何ともならないのでしょうか。 複数のブックを開いた状態でVBEを開くと、 どのブックをアクティブにしておいても、他のブックの モジュールが出てきますよね。これに関係あるのでしょうか。 VBAはそのブックだけに記述することができる・・・のでしょうか? 調べてみたのですがよくわかりませんでした。 基本的なことで恐縮ですが、こんな私にわかるよう 教えてくださる方いらしたらお願いいたします。

  • Excel VBA

    Excel VBAを勉強中の者です。 複数のワークブックを開いているため、ワークブックから指定していってセルを選択したいと思い下記のようなコードにしてみたのですができませんでした。 Workbooks(“C:\フォルダ\ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select このようなコードは有り得ないのでしょうか? または、ワークブックを開いて、ワークシートをアクティブにして、セルを選択するというように、ひとつひとつ選択していくのではなく、一文でワークブックからセルまで指定する他の方法はありますでしょうか? 教えてください。よろしくお願いします。