Excel VBA質問箱 IV

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

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


52935 / 76732 ←次へ | 前へ→

【28622】Re:検索該当行の複数セル値の取得について
回答  kobasan  - 05/9/10(土) 14:02 -

引用なし
パスワード
   ▼BON8021 さん 今日は

【28616】の問いは解決されたと読みました。もしそうでないなら、また連絡してください。

>先程より無限ループ云々という質問をさせて頂きましたが、
>Application.EnableEvents = False
>〜
>Application.EnableEvents = True
>
>で〜にあったFor文内の無限ループが解消されました。
>
>上記文、どのような意味があるか教えてください。

Private Sub Worksheet_Change(ByVal Target As Range)
はChangeがあるようにチェンジイベントのプロージャ(Sub)です。
これは、ワークシート内のセルの値が変化したとき動くプロージャです。

たとえば、キーボードからセルの値を変えたとき、このプロージャは動きます。
また、VBAのコードでセルの値を変えたときも、このプロージャは動きます。

今回のコードでいうと、

  mr = dicM(Cells(行, "A").Value & Cells(行, "K").Value)
  If mr > 0 Then Cells(行, "M").Resize(, 2).Value = _
          Sheets("Sheet2").Cells(mr, "M").Resize(, 2).Value

この部分はセルの値を変えていますので、この変化に対して、チェンジイベントが発生して、 
Private Sub Worksheet_Changeをまた実行しようとします。
そうすると、このコードよって同じコードを繰り返し、無限ループが発生するようになります。
この無限ループを避けるために、

  Application.EnableEvents = False
  mr = dicM(Cells(行, "A").Value & Cells(行, "K").Value)
  If mr > 0 Then Cells(行, "M").Resize(, 2).Value = _
          Sheets("Sheet2").Cells(mr, "M").Resize(, 2).Value
  
  Application.EnableEvents = True

とします。
こうすると、
Application.EnableEvents = False

Application.EnableEvents = True
の間のコードによって値が変化してもの、チェンジイベントが発生しないようにるわけです。

Application.EnableEvents = False
によって、コードによって値が変化してもの、チェンジイベントが発生しないようにしています。

しかし、このまま放っておくと、Private Sub Worksheet_Changeが、それ以降全く動かなくなり
ますので、チェンジイベントを発生させたくない部分が終わったところで、

Application.EnableEvents = True

を宣言して、チェンジイベントを発生させるようにします。

詳しくはEnableEventsをヘルプで調べてみてください。

Private Sub Worksheet_Changeなどのチェンジイベントはすごい能力を持っていますが、
今回のように無限ループに入ることがあるので、扱いが難しい面もありますので気をつけ
てください。
1 hits

【28486】検索該当行の複数セル値の取得について BON8021 05/9/7(水) 19:56 質問
【28487】Re:検索該当行の複数セル値の取得について ponpon 05/9/7(水) 21:25 発言
【28525】Re:検索該当行の複数セル値の取得について BON8021 05/9/8(木) 16:19 質問
【28540】Re:検索該当行の複数セル値の取得について ponpon 05/9/8(木) 21:22 発言
【28611】Re:検索該当行の複数セル値の取得について BON8021 05/9/10(土) 10:29 質問
【28615】Re:検索該当行の複数セル値の取得について ponpon 05/9/10(土) 11:27 発言
【28619】Re:検索該当行の複数セル値の取得について BON8021 05/9/10(土) 12:10 質問
【28636】Re:検索該当行の複数セル値の取得について ponpon 05/9/10(土) 21:40 発言
【28498】Re:検索該当行の複数セル値の取得について kobasan 05/9/8(木) 7:52 回答
【28609】Re:検索該当行の複数セル値の取得について BON8021 05/9/10(土) 9:44 質問
【28612】Re:検索該当行の複数セル値の取得について kobasan 05/9/10(土) 10:30 回答
【28613】Re:検索該当行の複数セル値の取得について kobasan 05/9/10(土) 10:36 回答
【28616】Re:検索該当行の複数セル値の取得について BON8021 05/9/10(土) 11:31 質問
【28623】Re:検索該当行の複数セル値の取得について kobasan 05/9/10(土) 14:16 回答
【28627】Re:検索該当行の複数セル値の取得について BON8021 05/9/10(土) 15:15 質問
【28628】Re:検索該当行の複数セル値の取得について kobasan 05/9/10(土) 15:35 回答
【28630】Re:検索該当行の複数セル値の取得について BON8021 05/9/10(土) 16:21 お礼
【28614】Re:検索該当行の複数セル値の取得について kobasan 05/9/10(土) 10:40 回答
【28617】Re:検索該当行の複数セル値の取得について BON8021 05/9/10(土) 12:05 質問
【28622】Re:検索該当行の複数セル値の取得について kobasan 05/9/10(土) 14:02 回答
【28624】Re:検索該当行の複数セル値の取得について BON8021 05/9/10(土) 14:48 お礼
【28631】Re:検索該当行の複数セル値の取得について BON8021 05/9/10(土) 17:16 質問
【28632】Re:検索該当行の複数セル値の取得について kobasan 05/9/10(土) 19:35 回答

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