すみません、お手数ですが教えて頂きたく宜しくお願い致します。

現在、以下のマクロにて前もって決められたデータを下回った時、または右クリックにて処理を中断(または終了)するように作成したのですが、思わぬエラーがでてきました。
エクセルを立ち上げ後(他の作業後も)、このマクロを始めて処理するときによく起こるのですが、キーやマウスを未操作にもかかわらず“中断しました”の処理でマクロを終了してしまいます。
どこに問題点があるのでしょうか? 皆目分からない為宜しくお願い致します。
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

回答の条件
  • 1人10回まで
  • 50 ptで終了
  • 登録:2008/01/03 20:57:46
  • 終了:2008/01/05 14:48:08

回答(3件)

ただいまのポイント : ポイント3 pt / 50 pt ツリー表示 | 新着順
戻り値の勘違い =や=2008/01/04 00:58:43ポイント2pt
こんにちは。 GetAsyncKeyStateの戻り値について勘違いされているのが原因だと思います。 仮想キーが押されているかどうかの判断は最上位ビットを確認する必要がありますので、キーの判断を以下のようにすることで解決 ...
御回答ありがとうございます。 dadan_dan2008/01/05 06:32:43
 最初の問題は解決したみたいなのですが、違う問題が出てきました。教えて頂けると幸いです。 どこかのサイトページにてマクロの“処理中に中断”させる処理が記載されていまして、 そのまま GetAsyncKeyState(2) 0 ...
マクロの強制的な中断? =や=2008/01/05 11:01:58ポイント1pt
マクロの強制的な中断であれば、Ctrlキーを押しながらBreakを押すと中断することができます。 プログラム中の処理として中断するのであれば、中断用のキーを決めてマウスの右クリック処理と同じような処理にすればOKだ ...
  • id:dadan_dan
    guribow さん
    ありがとうございました。おかげ様で問題なく処理を続けることができました。
    H8000は謎ですが、そのうち答えう出会うのを楽しみにしています。

    ありがとうございました。
  • id:guribow
    無事解決してよかったですね。以下参考まで。
    "&h8000"は、の"&h"は16進数を表す時に使います。GetAsyncKeyStateの戻り値は16bitなので、最上位ビットが立っているかどうかは、2進数で表すと"1000000000000000"になります。これを16進数で表すと"8000"になります。よって、比較する値は"&h8000"となります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません