ここから本文です

■Excel2003-[VBAイベント]-Changeイベントの無限ループを防ぐ方法

yas********さん

2008/9/2709:35:27

■Excel2003-[VBAイベント]-Changeイベントの無限ループを防ぐ方法

下記のイベントプロシージャだと
無限?ループを起こしてしまうようです。

'ここから
Private Sub Worksheet_Change(ByVal Target As Range)
Cells(Target.Row, 1) = "①"
Cells(Target.Row, 2) = "②"
Cells(Target.Row, 3) = "③"
End Sub
'ここまで

下記の条件分岐を追記することによって
無限?ループは4回になるようでした。

'ここから
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:C")) Is Nothing Then Exit Sub
Cells(Target.Row, 1) = "①"
Cells(Target.Row, 2) = "②"
Cells(Target.Row, 3) = "③"
End Sub
'ここまで

Changeイベントの実行中にワークシートに書き出すステートメントが
プロシージャ内にあると、そこからChangeイベントが
呼び出されてしまうのが原因?と推測しているのですが
どうなんでしょうか?

例えば、Changeイベント実行中は、Changeイベントの呼び出しを
無効にし、ループをしないようにする方法はないのでしょうか?

わかりづらい質問かもしれまでんが、ご教示お願い致します。

【若干の関連】
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1419411079

補足みなさま、回答有難うございます。

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Cells(Target.Row, 1) = "①"
Cells(Target.Row, 2) = "②"
Cells(Target.Row, 3) = "③"
Application.EnableEvents = True
End Sub

上記でループしないことを確認しました。
EnableEventsについて資料を纏めてから質問を閉めたいので
ご了承願います。

閲覧数:
30,002
回答数:
2
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

独覚さん

2008/9/2709:47:40

セルの変更を行う前に
Application.EnableEvents = False
を、変更後に
Application.EnableEvents = True
を実行してはどうでしょうか?

EnableEventsプロパティをFalseとするとイベントの発生を抑止します。

ただし、エラー等で途中終了して「Application.EnableEvents = False」のままに
なってしまうと「Application.EnableEvents = True」を実行するかExcelを
いったん終わらせるまでイベントマクロが働かないのでデバッグ時などには
注意が必要です。

質問した人からのコメント

2008/9/28 12:51:09

降参 回答有難うございました。

【備忘録】
EnableEvents プロパティ
http://msdn.microsoft.com/ja-jp/library/cc409238.aspx

ヘルプより下記の単語の意味が理解できず↓

スプレッドシート
http://kaden.yahoo.co.jp/dict/?type=detail&id=2424
上記より「ワークシート」も似たような意味で用いられるが、
こちらは一枚一枚の表を指し、スプレッドシートよりも意味が狭い。

・・・Sheetsコレクションってこと?なのか

ベストアンサー以外の回答

1〜1件/1件中

k@自転さん

編集あり2008/9/2709:51:05

こんにちは~^^

Application.EnableEvents = False
を入れるとイベントが発生しなくなります。

Trueにすれば復帰するからそれも入れておいてね^^;


編集追記
あら^^;
既に^^;

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる