Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


546 / 13645 ツリー ←次へ | 前へ→

【79779】OnKeyで1回だけマクロ実行したい まいろねふ 18/4/11(水) 14:35 質問[未読]
【79780】Re:OnKeyで1回だけマクロ実行したい マナ 18/4/11(水) 21:53 発言[未読]
【79782】Re:OnKeyで1回だけマクロ実行したい hatena 18/4/11(水) 22:43 回答[未読]
【79784】Re:OnKeyで1回だけマクロ実行したい まいろねふ 18/4/12(木) 11:42 お礼[未読]

【79779】OnKeyで1回だけマクロ実行したい
質問  まいろねふ  - 18/4/11(水) 14:35 -

引用なし
パスワード
   お世話になります。

Application.OnKeyメソッドを使ってマクロをキー入力に割り当て、
キーが押されたらマクロが実行されるようにしています。

マクロ内でApplication.Wait等を使い、処理に一定の時間がかかるように
しているのですが、マクロ動作中にキーが押された場合、押された回数分だけ
後からマクロを実行してしまいます。

マクロ実行中は次のキー入力をブロックし、終わってから受け付けるように
したいのですが、どうすれば良いでしょうか。
(マクロ開始時にOnKeyメソッドを無効にし、マクロ終了時に再度有効にするように
しましたが、駄目でした。)

【79780】Re:OnKeyで1回だけマクロ実行したい
発言  マナ  - 18/4/11(水) 21:53 -

引用なし
パスワード
   ▼まいろねふ さん:

>マクロ終了時に再度有効にするように
>しましたが、駄目でした。

Application.OnTimeを試してはどうでしょうか

【79782】Re:OnKeyで1回だけマクロ実行したい
回答  hatena  - 18/4/11(水) 22:43 -

引用なし
パスワード
   下記のようにすればどうでしょうか。
当方の実験では、マクロ実行中に、Shift + Ctrl + Aを連打しても、一回しか実行されませんでした。

Public Sub Sample()
  Application.OnKey "+^A", "" 'Shift + Ctrl + A キーを無効

  '時間のかかる処理
  Debug.Print "開始:" & Now
  Application.wait Now + TimeValue("0:00:10")
  Debug.Print "終了:" & Now

  DoEvents 'OSに制御を渡す→キー入力が送信された後、制御が返る
  Application.OnKey "+^A", "Sample" ''Shift + Ctrl + A キーにSampleマクロを割り当て
End Sub

【79784】Re:OnKeyで1回だけマクロ実行したい
お礼  まいろねふ  - 18/4/12(木) 11:42 -

引用なし
パスワード
   hatena様

ご指摘の通り、DoEventsを挟んだところ、目的の処理が実現できました。
ありがとうございました。

546 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free