こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ExcelマクロのApplication.EnableEvents

Sub AAA()
  Application.EnableEvents = False
  If a = 0 then
    処理A
  End If
  Application.EnableEvents = True
End Sub
このようなコードを組んでいます。

処理Aは、他シートへの書込みを行っており、
他シートのWorksheet_Changeイベントが動いて欲しくないので、
上記の位置にApplication.EnableEventsのFalseとTrueを入れたのですが、
(FalseとTrueを入れた位置は「If文の前後」ではなく、「コードの最初と最後」です)
処理Aによって他シートのWorksheet_Changeイベントも動きました。

ここで、
 Application.EnableEvents = False
 処理A
 Application.EnableEvents = True
のように記述したら、処理Aによる他シートのWorksheet_Changeイベントは止められました。

動かしたくない処理がある場合は、
その処理を行っている部分をピンポイントでFalseとTrueで挟まないといけないのでしょうか。
(最初と最後に宣言するのではダメなのでしょうか)
それとも今回のような動作をした要因は別にあるのでしょうか。

投稿日時 - 2007-08-23 09:55:30

QNo.3278770

暇なときに回答ください

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

こんにちは。

出ている情報だけでは、分からないですが、

Application.EnableEvents = False

で、イベントは止まります。

>その処理を行っている部分をピンポイントでFalseとTrueで挟まないといけないのでしょうか。

そんなことはないので、On Error で、エラー処理でもしてあるのでは?

イベント・ドリブン型マクロのコードをみてみないとはっきりといえません。Worksheet_Changeイベントだけではなかったりするかもしれません。

ただ、実際のコードとしては、イベントの外から、EnableEvents = False というのは、非常に特殊な例です。時々、自信家の方で違うという文句を付ける人もいるかもしれませんが、それは、まず、Worksheet_Changeイベントぐらいでは、そのコード内で除外条件をつけるというのが一般的です。全部をみないで、確定的なことは言えませんが。

投稿日時 - 2007-08-24 11:41:50

お礼

回答ありがとうございます。
止まるはずだということがわかってよかったです。
ソースを全て把握できていないので、たぶんEnableEvents = Falseを無視?するような部分があるのでしょう。
探してみます。

投稿日時 - 2007-08-24 15:49:47

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問