• ベストアンサー

ExcelのVBA

ExcelのVBAにてFor~Nextのプログラム処理中に スペース等の指定したボタンを押したらプログラムの処理を終了させる事はできるのですか? どうすれば良いのかわからないので教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

ESCキーで抜けます。 Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long Sub Test() Dim i As Long  For i = 1 To 10000    Range("A1").Value = i    If GetAsyncKeyState(27) <> 0 Then Exit For  Next i End Sub 参考: http://www1.plala.or.jp/chikada/cell/0101/0101.htm

makikki
質問者

お礼

ありがとうございました。 とても参考になりました。

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。KenKen_SP です。 通常はマクロの実行を中断するキーは、   ・ESC キー   ・Ctrl+Break キー のいずれかです。この場合は、   Application.EnableCancelKey = xlErrorHandler として、中断キー押下でエラー18を発生させ、それをトラップします。 しかし、処理の途中でいきなりマクロの実行を停止させては困る場合が多い わけで、ある一定の処理を終了させた後、切の良いところで中止させるのが 普通です。 以下は、処理を続行するかどうかを問い合わせるサンプルです。 Option Explicit Sub Sample()      Dim blnCancelFlag As Boolean   Dim intRes    As Integer      ' ESC キー、Ctrl+Break キーでエラーハンドラに飛ばします   Application.EnableCancelKey = xlErrorHandler   On Error GoTo ERROR_HANDLER        ' サンプル用無限ループにするため For ではなく Do にしました   Do        '(処理)               ' ループ処理の終わり=処理の区切りの良いところで終了確認     If blnCancelFlag = True Then       intRes = MsgBox("マクロが中断されました.中止しますか?", _               vbYesNo + vbQuestion + vbDefaultButton2)       If intRes = vbYes Then         Exit Sub       Else         ' 中断がキャンセルされたらフラグも元に戻す         blnCancelFlag = False       End If     End If   Loop   ' ERROR_HANDLER 以降が実行されない様にここで終了   Exit Sub    ERROR_HANDLER:   Select Case Err.Number     Case 18 ' 中断キーが押されるとエラー18が発生       ' 中断キーが押されたフラグをたてる       blnCancelFlag = True       ' 区切りの良いところで終了確認させるため、エラーをクリア       ' して一度処理を続行させます       Err.Clear       Resume     Case Else ' その他エラーの場合       ' エラーメッセージを表示して終了       MsgBox Err.Description, vbCritical       Exit Sub   End Select End Sub なお、スペースキーなどの規定外のキーでこのような処理を行うには、#2 ご回答のように キーの状態を調べる Win32API を使うことになります。

makikki
質問者

お礼

ありがとうございます

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

こんなことでしょうか? Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub tst() Dim i As Long For i = 1 To 10 If Worksheets(1).Cells(1, 2).Value = 1 Then Exit For Worksheets(1).Cells(i, 1).Interior.ColorIndex = 5 DoEvents Sleep 1000 Next i End Sub

makikki
質問者

お礼

ありがとうございます。

関連するQ&A

  • Excel VBAエラー”マクロシートに対する・・

    Excel VBAを勉強している者です。VBAプログラムで Sub Iro1() ・・・ End Sub Sub Iro2() ・・・ End Sub という処理のプログラムを作成しエクセルシートにボタンを作りマクロ登録をしようとすると ”マクロシートに対する参照を指定ください”とエラーが出ます。 すみませんが、解決方法を教えてください。

  • エクセルVBAで

    いつもお世話になります。 VBAでfor:nextとifを使って検索していますが、セル数が多くて結構時間がかかってしまいます。 for:nextを使わずセルの検索したい範囲を指定して、検索をかけることは可能でしょうか? よろしくお願いします。

  • エクセルVBAの自動変換機能?

    エクセルVBAをwebで検索しながらプログラムしている初心者です。 VBEで入力していると変数名などの大文字・小文字を自動変換してくれる機能があると思いますが,そのことでの質問です。 いつもFor~Nextのループ処理を使う時,変数"a"とするのですが(For a=0 to 7 ~Next a),それが入力の最中突然"A"に変換されました。すると,そのExcel内のすべてのVBAの変数"a"が"A"に,Cells(r,c)がcells(r,c)になりました。 大文字・小文字で入力し直しても,勝手に変換されてしまいます。 プログラム自体は支障はなく動いているのですが,理由が判らず気持ち悪いです。どうしてこうなったのか,どうしたら直るのかご教授お願いします。

  • エクセル VBA 曜日による処理?

    エクセルVBAにて複数社注文書を入力→1日の注文締切→ コマンドボタン1(プリントアウト)クリック時に 各社を統一した注文書の1日分をプリントアウトの 処理を行っているのですが、 毎週金曜日のみ注文書無しでプリントアウトを行いたい エクセルデーターがあるのですが注文書が無いため どうしても忘れがちになってしまいます。 金曜日のみ処理(指定データプリントアウト)を 行うプログラムをコマンドボタン1に追記すればいいと 思うのですが、教えていただけないでしょうか? また、出来るならば各曜日の指定がわかりますと 助かります。 以上宜しくお願いいたします。

  • EXCEL VBAから、VBのフォームを開くためには?

    EXCEL VBAからVBへプログラムを移そうと努力しています。 そこで、エクセルのシートのコマンドボタンを押すと、 VBで作成したフォームが開き、そこからEXCELの処理を させたいと考えています。 VBからエクセルの処理は Excel.Application のあたりをつかうことでなんとかなりそうなんですが その逆がわからず行き詰まっています。 EXCELは2000 VBは6.0 です ご存じの方、よろしくお願いします。

  • エクセルVBAのInputBoxで「キャンセル」ボタンを押したときの動

    エクセルVBAのInputBoxで「キャンセル」ボタンを押したときの動作 上記のボタンが押されたときに強制的にプログラムを終了させる方法はありますか。 教えてください。

  • Access VBA実行中にエクセルが開かない

    すみません、お世話になります。 Access VBA初心者なので言葉足らずかも知れません。 申し訳ありません。 Access VBAで画面からDBの値を抽出して画面に表示、 プログラム上でその表示データをエクセル出力するというものを 作成しています。 エクセルは新しいブックを作成してデスクトップに貼り付けるように 指定しています。 エクセ出力後、Accessを終了せずに作成したエクセルを開こうとすると エクセルが最後まで表示できません。 Accessを終了するとエクセルはちゃんと表示されます。 何かAccessのほうで設定しなくてはいけないのでしょうか? それともプログラムで制御しなくてはいけないのでしょうか? まったく想像がつきません。 よろしくお願いします。

  • excelのシートからVBAを除いて書き出し

    特定のExcelのシート(以後、出力シート)だけを予め指定したファイルへexcel形式で書き出したいです。 そのとき、出力シートにはボタンやボタンに関連付けされたVBAプログラムがあるのですが、それらのボタンやシートに関連付けされたVBAは書き出さずに、純粋に各セルに記載されている内容と罫線情報だけを書き出したいです。 出力シートにはVBAを残したくないのが理由ですが、上記のような書き出しをするにはどのようにすればよいのでしょうか。

  • エクセルVBAで

    エクセルのVBAのFor文のような繰り返し処理で、 for i = 1 to 最終行 のように、セルA1からデータが入力されている最終行まで繰り返すために最終行を求めたいのですがどうすれば良いでしょうか?

  • VBAの考え方からVisualBasicへ

    いつもお世話になっています。 約半年ほど前よりエクセルのVBAを勉強し始めまして 機会がありVisualBasicを覚える事になりました。 会社の先輩が作ったVB6のコードを見ていたのですが やっている事が何となくわかる様なわからない様な・・・ という感じです。。 例えばエクセルでは(A1~A20までのセル)、VBでは同じようにグリッドにデータが入力してあり 選択しているセル(A1)のデータと一致するセルを含む行又はレコードを選択するという処理があったとします。(あくまでも例です) エクセルでもVBでもFor~Nextが使える事はわかったのですが 対象とする目印?的なものの(基準というか考え方というか)が理解出来ないのです・・・・。。 エクセルだとcells(rows.count,1).end(xlup).rowで最終行を取得して For~NextでIf Range("A1").value = cells(i,1).value then・・・ で処理できますがVBではどうなのかとか・・・・ (説明がめちゃくちゃですみません。。泣) 同じようにVBAからVisualBasicを始めた方! VBAでのプログラミングの考え方とVisualBasicの考え方の違いや どういう風に勉強していけば良いか等、アドバイスや経験談等を教えて頂きたいです。 宜しくお願い致します。