現在、以下のマクロにて前もって決められたデータを下回った時、または右クリックにて処理を中断(または終了)するように作成したのですが、思わぬエラーがでてきました。
エクセルを立ち上げ後(他の作業後も)、このマクロを始めて処理するときによく起こるのですが、キーやマウスを未操作にもかかわらず“中断しました”の処理でマクロを終了してしまいます。
どこに問題点があるのでしょうか? 皆目分からない為宜しくお願い致します。
Sub 連続処理()
For I = 1 To 10
If 色別.Value = 下限 Then MsgBox "データ下限です。終了します。": Exit Sub
ActiveWindow.SmallScroll Down:=1
If GetAsyncKeyState(2) <> 0 Then MsgBox "中断しました": Exit Sub
Call E_DOWN_DAY
Next
End Sub
最初の問題は解決したみたいなのですが、違う問題が出てきました。教えて頂けると幸いです。
どこかのサイトページにてマクロの“処理中に中断”させる処理が記載されていまして、
そのまま GetAsyncKeyState(2) <> 0 にしました。
教えて頂きました形に変更すると“中断”が出来なくなってしまいました。
どの様にすれば解決するのでしょうか。お手数ですが宜しくお願い致します。
マクロの強制的な中断であれば、Ctrlキーを押しながらBreakを押すと中断することができます。
プログラム中の処理として中断するのであれば、中断用のキーを決めてマウスの右クリック処理と同じような処理にすればOKだと思います。
こんにちは。
GetAsyncKeyStateの戻り値について勘違いされているのが原因だと思います。
仮想キーが押されているかどうかの判断は最上位ビットを確認する必要がありますので、キーの判断を以下のようにすることで解決すると思います。
If GetAsyncKeyState(2) = "&H8000" Then MsgBox "中断しました": Exit Sub
戻り値については以下のサイトをご覧ください。
GetAsyncKeyState