ExcelVBA 入力・編集モードから抜けるタイミングでイベント取れた!

タイトルどおり、ここ数日探っていた入力・編集モードから抜けるタイミングでのイベントを取ることができました!
正確には、イベントを取ったのと似たような動作をする裏技を見つけた。という感じです。
……まぁ、こんなタイミングでイベント取りたいのなんか私くらいなものでしょうけど、参考程度にどうぞ〜。


経緯から話すと、まずはやりたかったのは、セルの入力・編集モードに入るときに日本語入力ONに。そこから抜けるときに日本語入力OFFにしたかったのです。
というのも、通常時にVimと同じ操作にしたいがためにSendKeysでjに←キーを割り当てたりしていたので、通常モードでは常に日本語入力OFFにしておく必要がありました。(日本語入力ONだと、処理をそっちに持ってかれるため)
しかし当然ながら、セル入力中は日本語入力ONを頻繁に使うので、この操作を実用的なところまで持っていくには、入力を抜けたらオートで日本語入力OFFにしないといけないなぁと考えてたのです。


まずは順当に、Excelのデフォルトで用意されているイベントプロシージャのChangeでできるかなぁと思ってやったんですよ。
「お、できた!」と思ったのは束の間、F2やらで編集モードに入って、「ESC」で抜けてきたときに反応しないんですね〜。(まぁ、当然セルの内容は変わってないのでChangeは呼ばれないですよね……)
そこからが長かった……。入力規則いじったりいろいろ試してみましたが、どうにも実現できず。
しかし全然違うのを調べてるときに、OnTimeの存在を知ってから少し経ってひらめきました。


OnTimeは、指定した時刻に指定した関数を実行するように、タイマーをセットする機能を持ってます。
そしてココがポイントなのですが、このOnTimeで指定した時刻になった際に入力・編集モードになっていた場合、これを抜けるまで待つ特性があるらしいのです。
それを利用して書いたコードがこれ。

'escapeEdit()には編集モードを抜けたときの処理を記述。
Application.OnTime Now + TimeValue("00:00:01"), "escapeEdit"

編集モードに入る際(「i」キーなどをOnKeysで「F2」に割り当ててあるので、ココのタイミング)にこれを仕掛けておけば、上のことを実現できました!
ただ、これは見ての通りかなり強引な裏技的な手段なので、下手したら環境によっては上手くいかないかもしれません。
それに、1秒未満に「Esc」キーを押されると、当然ながら抜ける際の処理が実行されるまで(1秒未満ではありますが)ラグが出てしまいます。
しかしまあ、かなり絶望的だったので、とりあえず手持ちのExcel200/2002では動いてるので、これでいいかなーって感じです。
もっとスマートな方法知ってる方がいたら、ゼヒ教えてください〜。