Excel VBA 質問スレッド №1568 (解決済)
ループ処理中のApplication.OnKeyについて
投稿者 : とぅー 投稿日時 : 2023/09/16(Sat) 08:12:23 OS : Windows 11 EXCEL : Office 365
はじめまして。
ループの最中にApplication.OnKeyで指定したプログラムを起動させ、ループ処理の条件を変えるようなプログラムを作成したのですがうまくいきません。
Application.OnKeyの仕様がわかっていないせいかもしれませんが、なぜ動かないのか教えていただけますか。
はじめまして。
ループの最中にApplication.OnKeyで指定したプログラムを起動させ、ループ処理の条件を変えるようなプログラムを作成したのですがうまくいきません。
Application.OnKeyの仕様がわかっていないせいかもしれませんが、なぜ動かないのか教えていただけますか。
Public flag As Boolean Public i As Integer ' Ctrl+Alt+eキー入力を検出するためのイベントを追加 Private Sub Workbook_Open() Application.OnKey "^%e", "ToggleFlag" End Sub ' flagの値を切り替えるサブルーチン Public Sub ToggleFlag() flag = Not flag Debug.Print "flag: " & flag End Sub Public Sub hoge() Do While flag = False Debug.Print i i = i + 1 DoEvents Loop Debug.Print "ループ終わり" MsgBox "終了!" End Sub
スポンサーリンク
[返信 1] Re : ループ処理中のApplication.OnKeyについて
投稿者 : higeru 投稿日時 : 2023/09/16(Sat) 11:31:35
今確認できる環境にないのでずが、以下のページ(だいぶ下の方)に、動かないから調査中の旨の注意書きがありますね。
https://learn.microsoft.com/ja-jp/office/vba/api/excel.application.onkey
今確認できる環境にないのでずが、以下のページ(だいぶ下の方)に、動かないから調査中の旨の注意書きがありますね。
https://learn.microsoft.com/ja-jp/office/vba/api/excel.application.onkey
[返信 2] Re : ループ処理中のApplication.OnKeyについて
投稿者 : tek 投稿日時 : 2023/09/16(Sat) 15:32:05
あまり記事を見つけることが出来ませんが、Doevents と Application.Onkey の併用は出来ない仕様のようです。
https://www.reddit.com/r/vba/comments/13ad5ci/combining_doevents_with_applicationonkey/?rdt=58150
私も実行させましたが、
Doevents中にOnkeyでのToggleFlagは実行されません。
もう少し待って良い回答が付かないようなら、マイクロソフトコミュニティに問い合わせてみたらいかがでしょうか。
excel2016
あまり記事を見つけることが出来ませんが、Doevents と Application.Onkey の併用は出来ない仕様のようです。
https://www.reddit.com/r/vba/comments/13ad5ci/combining_doevents_with_applicationonkey/?rdt=58150
私も実行させましたが、
Doevents中にOnkeyでのToggleFlagは実行されません。
もう少し待って良い回答が付かないようなら、マイクロソフトコミュニティに問い合わせてみたらいかがでしょうか。
excel2016
[返信 3] Re : ループ処理中のApplication.OnKeyについて
投稿者 : ピロリ 投稿日時 : 2023/09/16(Sat) 16:01:25
私もこの辺りは詳しくないですが、下のような走り切りの処理にしないと上手く行かないのかも知れませんね・・・
期待する回答でなくて御免なさい。
私もこの辺りは詳しくないですが、下のような走り切りの処理にしないと上手く行かないのかも知れませんね・・・
期待する回答でなくて御免なさい。
Public Sub hoge2() If flag = False Then Debug.Print i i = i + 1 Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), _ Procedure:="hoge2" '1秒後に自分自身の起動を宣言 Else Debug.Print "ループ終わり" MsgBox "終了!" End If End Sub
[返信 4] Re : ループ処理中のApplication.OnKeyについて
投稿者 : ごんぼほり 投稿日時 : 2023/09/17(Sun) 02:47:41
代替案ですが、このようにして Ctrl + Breakキーで止めたらどうでしょう
代替案ですが、このようにして Ctrl + Breakキーで止めたらどうでしょう
Public Sub hoge() Dim i As Long Application.EnableCancelKey = xlErrorHandler On Error GoTo Interrupt_Exit Do While True Debug.Print i i = i + 1 DoEvents Loop Exit Sub Interrupt_Exit: Debug.Print "ループ終わり" Application.EnableCancelKey = xlInterrupt MsgBox "終了!" End Sub
[返信 5] Re : ループ処理中のApplication.OnKeyについて
投稿者 : とぅー 投稿日時 : 2023/09/18(Mon) 08:12:41
なるほど。やはりだめなのですね。
わざわざ教えていただき助かりました。
ありがとうございました。
なるほど。やはりだめなのですね。
わざわざ教えていただき助かりました。
ありがとうございました。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2023-10-01 23:27:10 )