Excel VBA質問箱 IV

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

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


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

【58960】フリーズ 初心者 08/11/20(木) 14:02 発言[未読]
【58961】Re:フリーズ ひげくま 08/11/20(木) 14:26 回答[未読]
【58964】Re:フリーズ 初心者 08/11/20(木) 14:50 お礼[未読]
【58962】Re:フリーズ VBWASURETA 08/11/20(木) 14:27 発言[未読]

【58960】フリーズ
発言  初心者  - 08/11/20(木) 14:02 -

引用なし
パスワード
   初歩的な質問ですが
下記コードを動かしたのですが
i = i + 1
の所で止まってしまいます。
自分で調べてみましたが、どこが悪いのか見当が付きません。
どなたかご教授お願いします。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Long
i = 9

With ActiveSheet
Do Until .Cells(i, 4 - 1).Value = ""
  .Cells(i, 4).Value = .Cells(i - 1, 4) + .Cells(i, 4 - 1)
 i = i + 1
Loop
 .Cells(3, 3).Value = .Range("D65536").End(xlUp).Value
 End With
 End Sub

【58961】Re:フリーズ
回答  ひげくま  - 08/11/20(木) 14:26 -

引用なし
パスワード
   > 止まってしまいます。

これだけじゃなく、どんなエラーメッセージが出ているのか、とか、もっと詳しく伝えられるようになりましょう。

で、今回の場合は、なぜ「i = i + 1 のところで止まっている」と判断したのでしょうか?

その上の行の処理の次に、サブルーチンの最初に戻ってしまうからですか?

.Cell(i, 4) に値を書き込むことで、Changeイベントが発生してしまっているのです。
そして、それが無限に繰り返されています。

回避するために、書き込む前のどこかで、
Application.EnableEvents = Flase
と書いて、イベントが発生しないようにして、
書き込んだあとのどこかで、
Application.EnableEvents = True
と書いて、元に戻してあげましょう。

【58962】Re:フリーズ
発言  VBWASURETA  - 08/11/20(木) 14:27 -

引用なし
パスワード
   ▼初心者 さん:

こんにちは。
それはフリーズではなくイベントで動かそうとして
値が変更するためにイベントが繰り返しされているだけではないですか?
同じ値なら抜ける条件でも入れれば終わるのではないかと思います。

【58964】Re:フリーズ
お礼  初心者  - 08/11/20(木) 14:50 -

引用なし
パスワード
   ▼ひげくま さん:
 VBWAASURETA さん

出来ました!助かりました。
お二方とも本当に有難う御座いました。

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