Excel VBA質問箱 IV

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

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


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

【48892】ループの中に別のプロシージャを実行するには? MONKEY 07/5/14(月) 14:53 質問[未読]
【48901】Re:ループの中に別のプロシージャを実行す... ichinose 07/5/15(火) 7:50 発言[未読]
【48905】Re:ループの中に別のプロシージャを実行す... MONKEY 07/5/15(火) 16:36 お礼[未読]

【48892】ループの中に別のプロシージャを実行する...
質問  MONKEY  - 07/5/14(月) 14:53 -

引用なし
パスワード
   ループの中にDoEventsを入れておけば、ループ実行中に別のプロシージャを実行させることが可能ってことですけど、

Application.OnKey "{LEFT}", "left_key"

ってな感じで"left_key"プロシージャを実行しようとしても実行できません。

ループを抜けると普通に実行できてます。

何か良い方法があればご教授お願いします。

【48901】Re:ループの中に別のプロシージャを実行...
発言  ichinose  - 07/5/15(火) 7:50 -

引用なし
パスワード
   ▼MONKEY さん:
おはようございます。
マクロ実行中は、Onkeyメソッドは、実行されませんよね!!

方法としては、

1 APIのGetAsyncKeyStateを使う

2 Ontimeでを使ってループさせる(この時は、Onkeyメソッドが使えました)

3 キーをトリガーにする仕様を変更する
 (別の例えばボタンクリックで別マクロを実行させる仕様するとか
  これならば、実現可能です)

私なら、3ですが・・・。

2も試しましたが、ちょっと処理が遅い

例は1の方法で

例えば、ループ中では セルA1(アクティブシート)に1を足す
という処理を行うとします。

LEFTキーで足されたセルA1の値をクリアする
RIGHTキーでループから抜ける

という仕様で考えると・・・、

新規ブックの標準モジュールに

'==================================================================
Option Explicit
Private Declare Function GetAsyncKeyState Lib _
    "User32.dll" (ByVal vKey As Long) As Long
'==================================================================
Sub sample1()
  Do Until GetAsyncKeyState(39) <> 0
   If GetAsyncKeyState(37) <> 0 Then
     left_proc
     End If
   [a1].Value = [a1].Value + 1
   DoEvents
   Loop
End Sub
'==================================================================
Sub left_proc()
  [a1].Value = 0
End Sub

sammple1を実行し、実行中に LEFTキーを押してみてください

【48905】Re:ループの中に別のプロシージャを実行...
お礼  MONKEY  - 07/5/15(火) 16:36 -

引用なし
パスワード
   ▼ichinose さん:
1の方法が自分がしたいことに丁度都合が良かったです。
助かりました。ありがとうございます。

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