- ベストアンサー
Excel 2003 VBAにてマクロの実行中にESCキーにて中断されないようにしたい
Excel 2003 にてマクロの実行中にESCキーを押されるとコードの実行が中断されるのを抑制したいのですができません。 シートに直接テキストボックスコントロールを貼り付けています。 そのテキストボックスにKeyDownイベントプロシージャを記述しています。 テキストボックスにIMEの全角文字を入力中(未確定状態)の時に、ESCキーを押すとコードの実行を中断しましたというダイアログが出てしまいます。 KeyDownイベントプロシージャの内容の有無にかかわらず(処理は無記入でも)、ESCキーを押すとダイアログが表示されてしまいますので、ESCキーを押してもダイアログが表示されず処理が中断されない方法はありませんでしょうか。 調べましたところ、 Application.EnableCancelKey = xlDisabled にてESCキーを無効にする事ができるそうなのですが、BOOKを開いた時のイベントにて 上記コードを記載しているのですが、抑制はできません。 何かしら別の方法で対応などはできないものなのでしょうか。 よろしくご教示をお願い申し上げます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
KeyDownイベントの内容がわからないので今ひとつ不安ですが、 以下で対応できるかもしれません。 'Sheetモジュール Option Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private flg As Boolean Private Sub TextBox1_GotFocus() Application.EnableCancelKey = xlDisabled flg = False Do Sleep 1 DoEvents Loop Until flg End Sub Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) '処理 End Sub Private Sub TextBox1_LostFocus() flg = True End Sub
その他の回答 (2)
- end-u
- ベストアンサー率79% (496/625)
解決でなによりです。 >GotFocusに処理が留まり続けることで、Application.EnableCancelKey = xlDisabled が有効となり続けるという解釈でよいでしょうか。 概ねその通りです。 TextBox1がFocusを得たとき、TextBox1_GotFocusイベントが実行されます。 このイベントプロシージャが終了するまで EnableCancelKey = xlDisabled です。 Do Sleep 1 DoEvents Loop Until flg Loop終了条件 flg = True ...つまり LostFocusイベントが発生するまで このLoopが回り続けますから、ずっとEnableCancelKey = xlDisabled です。 Loopの中でDoEvents関数で他プロシージャが実行できるようにしてありますので xlDisabled状態でKeyDownイベントが発生する事になります。 #ちなみに Sleep 1 はCPU使用率100%を回避する為。
お礼
ご丁寧にご教示頂きましてありがとうございます。 おかげさまで理解できました。 なるほど私が勘違いしていました。 まだまだ勉強が必要な様です。 どうもありがとうございました。
- pkh4989
- ベストアンサー率62% (162/260)
こんにちは。 BOOKを開いた時のイベントにて記載するのではなく、 全て Sub, Function の先頭に記載してみてください。
お礼
ご回答ありがとうございます。 試しに新規BOOKのsheet1にテキストボックスコントロールを貼り付けて以下のコードのみを記述し、テキストボックスに全角入力中にESCキーをおしてみたところ、コードの中断のダイアログボックスが表示されてしまいました。 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Application.EnableCancelKey = xlDisabled End Sub その他のプロシージャを記述し、設定しなければいけないのでしょうか。
お礼
ご連絡が遅くなりまして申し訳ありません。 確かに出来ました!! ありがとうございます。 しかし何故問題が発生しないのか、今ひとつ理解できていません。 GotFocusに処理が留まり続けることで、Application.EnableCancelKey = xlDisabled が有効となり続けるという解釈でよいでしょうか。 何にせよ問題が解決しました。ご丁寧にご教示頂きましてありがとうございます。