MW211 EXIT

devlog
ExcelVBA/入力補助のはずが無限ループ
2014年09月01日
シート記述するマクロで、以下のように記述すると
「Cells(2, 3)」に値を入力した場合、自動で「様」がついてくれる想定だ。
┌──────────────────────────────────────┐
│Private Sub Worksheet_Change(ByVal Target As Range)                         │
│    If Target.Row = 2 And Target.Column = 3 Then                            │
│        Target.Value = Target.Value & "様"                                  │
│    End If                                                                  │
│End Sub                                                                     │
└──────────────────────────────────────┘
でも実際に実行してみると、入力後「様様様…」という、大量の「様」がついてしまう。

これは、自分で自分の値を変えてその結果新たに自分を呼び出しているから
…つまり無限ループしてるって訳だ。

ということで、これを防ぐ方法。
┌──────────────────────────────────────┐
│Private Sub Worksheet_Change(ByVal Target As Range)                         │
│    If Target.Row = 2 And Target.Column = 3 Then                            │
│        Application.EnableEvents = False                                    │
│        Target.Value = Target.Value & "様"                                  │
│        Application.EnableEvents = True                                     │
│    End If                                                                  │
│End Sub                                                                     │
└──────────────────────────────────────┘
「Application.EnableEvents = False」で一旦自分が呼ばれないようにしてから
値を変えればいいってことだ。
もちろん、次のイベントのために、「True」で戻すことも忘れずに。
分類:ExcelVBA