MW211 EXIT

devlog
ExcelVBA/入力イベントはマクロからのも反応します
2014年10月27日
セルのフォーカスが変わった時に
(というよりは特定のセルにフォーカスがあたった時に)
イベントを起こす、シートの関数に以下のようなものがある。
┌──────────────────────────────────────┐
│Private Sub Worksheet_SelectionChange(ByVal Target As Range)                │
│    …                                                                      │
│End Sub                                                                     │
└──────────────────────────────────────┘

これ、実は、マクロによってシートのフォーカスが変わったりした場合にも
起動してしまう。

基本手入力の捕捉なので、なんとかして欲しいものだと思う。

で、その回避方法。
「Application.EnableEvents」を無効にして、本関数自体が呼ばれないようにする。

イメージとしては以下のような感じ。
┌──────────────────────────────────────┐
│Application.EnableEvents = False                                            │
├──────────────────────────────────────┤
│Private Sub Worksheet_SelectionChange(ByVal Target As Range)                │
│    …                                                                      │
│End Sub                                                                     │
├──────────────────────────────────────┤
│Application.EnableEvents = True                                             │
└──────────────────────────────────────┘
あくまでイメージ
┌──────────────────────────────────────┐
│Application.EnableEvents = False                                            │
│Call Worksheet_SelectionChange()                                            │
│Application.EnableEvents = True                                             │
└──────────────────────────────────────┘
上記とかだったらわかりやすいのだが、いかんせん「Worksheet_SelectionChange」は
どのタイミングで呼ばれるか未確定なのだ。

ということで、イベントが起きそうな前後で、「Application.EnableEvents」を
切り替えてあげればよい。
→なお、最後に有効にしないと手入力イベントも捕捉できなくなるので注意
分類:ExcelVBA