Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1303 / 13644 ツリー ←次へ | 前へ→

【75186】無限ループ?について でめ 13/12/29(日) 16:48 質問[未読]
【75187】Re:無限ループ?について kanabun 13/12/29(日) 17:23 発言[未読]
【75188】Re:無限ループ?について でめ 13/12/29(日) 17:44 お礼[未読]
【75189】Re:無限ループ?について でめ 13/12/29(日) 18:03 お礼[未読]

【75186】無限ループ?について
質問  でめ E-MAIL  - 13/12/29(日) 16:48 -

引用なし
パスワード
   ご教授お願いします。エクセル2003です。

下記のようなワークシートのチェンジイベントで、今は正常に動いています。
ところが、コメントアウトをはずすと無限ループに入ったような挙動を起こします。
データは2カ所あるいは3カ所に正常に複写されています。
何が原因か教えていただければと思います。
よろしくお願いします。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim セル As String
  
  セル = ActiveWindow.ActiveCell.Address
  Select Case セル
    Case "$G$11"
      Range("H11").Value = Range("g11").Value
    Case "$G$12"
      Range("h12").Value = Range("g12").Value
    Case "$G$16"
      Range("g17").Value = Range("g16").Value
'      Range("g23").Value = Range("g16").Value
'      Range("g24").Value = Range("g16").Value
  End Select
End Sub

【75187】Re:無限ループ?について
発言  kanabun  - 13/12/29(日) 17:23 -

引用なし
パスワード
   ▼でめ さん:

>コメントアウトをはずすと無限ループに入ったような挙動を起こします。

たとえば、[G11]セルが変化したら、
>      Range("H11").Value = Range("g11").Value
[H11]セルを書き換えてますね?
[H11]セルが変われば、また Changeイベントが発生します。
場合により、Changeイベントの連鎖反応が起きます。

Changeイベントのなかで、セルを書き換えるときは、イベントを抑止して
おきましょう

>Private Sub Worksheet_Change(ByVal Target As Range)

  Application.EnableEvents = False
  Select Case Target.Address(0,0)
    Case "G11"
      Range("H11").Value = Target.Value
    Case "G12"
      Range("H12").Value = Target.Value
    Case "G16"
      Range("G17").Value = Target.Value
      Range("G23").Value = Target.Value
      Range("G24").Value = Target.Value
  End Select
  Application.EnableEvents = True

>End Sub

【75188】Re:無限ループ?について
お礼  でめ E-MAIL  - 13/12/29(日) 17:44 -

引用なし
パスワード
   ▼kanabun さん:
早速のご教授ありがとうございます。

>[H11]セルが変われば、また Changeイベントが発生します。
>場合により、Changeイベントの連鎖反応が起きます。
イベントで書き換えた場合も新たなイベントが発生しているということですね。
一行だけの時はすんなりできていたので思いも及びませんでした。

わかりました。
イベントの抑止方法も含めて改めて勉強してみます。
今後ともよろしくお願いします。

【75189】Re:無限ループ?について
お礼  でめ E-MAIL  - 13/12/29(日) 18:03 -

引用なし
パスワード
   ▼kanabun さん:

Application.EnableEvents = False
を最初に実行してその後の処理を実行させたところ
所期の結果を得ることができました。

問題解決です。
ありがとうございました。

1303 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free