• ベストアンサー

EXCEL-VBAでキー入力で処理を分岐させたいのですが・・・

長い処理を繰り返すプログラムを使っています。 ESCキーを押すと処理が止まりますが、どこで止まるか決まってないので困ります。 プログラムの実行中に、キー又はマウスの操作を変数に取り込み、処理を分岐し終了処理をさせたいのですが、その方法があったら、教えてください。

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

  • ベストアンサー
回答No.2

これじゃあ、ダメかな? ESCキーを押すと"ESCが押されました"というメッセージが表示される。 -------------------------------------------------- Sub a() Dim i As Long ' エラー処理を登録 On Error GoTo ERR1 ' ESCキーでエラー処理に進む Application.EnableCancelKey = xlErrorHandler For i = 1 To 60000 Cells(i, 1).Select Next i GoTo EXIT1 ' エラー処理 ERR1: MsgBox "ESCが押されました" ' 終了処理 EXIT1: ' セットしたプロパティを初期値に戻す Application.EnableCancelKey = xlInterrupt Application.StatusBar = False End Sub -------------------------------------------------- これを色々応用すれば、何とかESCキーで分岐は出来そうですが。

oyaji-2
質問者

お礼

ありがとうございます。ERR1:の中でフラグを立て、RESUMEで元の処理に戻し、分岐させたいところでフラグを見て分岐させればできそうな気がします、試してみます。どうもありがとうございました。

その他の回答 (2)

  • merys
  • ベストアンサー率25% (1/4)
回答No.3

どのような処理をしているのかわからないのですが、MsgBox関数を使って終了するか、続けるかを選択するというのはだめでしょうか? If MsgBox("end?", vbOKCancel) = vbOK Then '処理を終了する End If 分岐点に↑のような記述をするとか。 メッセージボックスが現れて、OK、キャンセルボタンをクリックすることで処理の流れを変えられますよ。 そういうことじゃないんだよ、ということでしたらごめんなさい。

oyaji-2
質問者

お礼

普通はずーと処理を続けていて「止めたいな」と思った時にマウス操作をして止める、それもどこでも良いわけでは無く、丁度良い処理の切れ目で分岐してから終了の処理をして止めたい、という横着者の質問ですなんです。ご回答ありがとうございました。

回答No.1

ダミーで良いですから、適当なユーザーフォームを作くり、それを表示した状態で、目的の処理をすれば、マウスのダブルクリックや、ユーザーフォーム上をクリックするなどの操作による、イベントドリブンなプログラムを書けます。 例えば、ユーザーフォーム上をクリックして場合は、下記のサブプロシージャーが実行されますので、この中に処理を終わらせる記述が出来ます。 Private Sub UserForm_Click() End Sub

oyaji-2
質問者

お礼

ありがとうございます。試してみます。

関連するQ&A

  • モードレスダイアログのキー入力について

    VC++6.0で親ダイアログで作成した子ダイアログをモードレスで表示しています。(ShowWindowで表示した後、子ダイアログが終了するまでループ) 両方のダイアログに、OKボタンとキャンセルボタンしかない時には、リターンキー・ESCキーを押せば子ダイアログが終了していました。(親ダイアログにフォーカスがあるときには親ダイアログが終了) ところが、子ダイアログが表示されている間、親ダイアログ上でプログレスバーを表示・更新ようにしたら、とたんにリターンキー・ESCキーが効かなくなり、マウスのクリックでしか終了することができなくなりました。 WEBで調べてPreTranslateMessageを追加して、この関数にブレイクポイントを設定しましたが、呼ばれている様子がありません。 子ダイアログをマウスのボタンクリックで終了させた後は、親ダイアログのPreTranslateMessageでイベントが取得できます。 何をどうしたらリターンキー・ESCキーのイベントが取得できるようになるのでしょうか?

  • Excel 2003 VBAにてマクロの実行中にESCキーにて中断されないようにしたい

    Excel 2003 にてマクロの実行中にESCキーを押されるとコードの実行が中断されるのを抑制したいのですができません。 シートに直接テキストボックスコントロールを貼り付けています。 そのテキストボックスにKeyDownイベントプロシージャを記述しています。 テキストボックスにIMEの全角文字を入力中(未確定状態)の時に、ESCキーを押すとコードの実行を中断しましたというダイアログが出てしまいます。 KeyDownイベントプロシージャの内容の有無にかかわらず(処理は無記入でも)、ESCキーを押すとダイアログが表示されてしまいますので、ESCキーを押してもダイアログが表示されず処理が中断されない方法はありませんでしょうか。 調べましたところ、 Application.EnableCancelKey = xlDisabled にてESCキーを無効にする事ができるそうなのですが、BOOKを開いた時のイベントにて 上記コードを記載しているのですが、抑制はできません。 何かしら別の方法で対応などはできないものなのでしょうか。 よろしくご教示をお願い申し上げます。

  • キー入力について

    C言語でプログラミングをしています。 Windows上で実行する場合、ESCキーを入力として 読み取るにはどうすればよろしいのでしょうか?

  • フォルダ参照ダイアログAPIをVBAに組み込んだときのESCキー押下

    フォルダ参照ダイアログAPIをVBAに組み込み、フォルダ選択画面が表示されたとき、ダイアログ上の「OK」「キャンセル」以外に、キーボードの「ESC」キーを押下すると、VBAの「コードの実行を中止」ダイアログが表示されプログラムの実行が中断します。「ESC」キーを押下しても「キャンセル」と同等の処理で、「コードの実行を中止」ダイアログを表示しないようにできるでしょうか。お知恵をお貸しください。

  • VBAでESCキーを無効にしたいのですが、うまくいきません。

    EXCEL VBA でESCキーを無効にするために、 Application.EnableCancelKey = xlDisabled を使用していますが、 特定のフォルダ内のEXCELファイルを開いて、ある処理をして保存するといったプログラムでは、ESCキーを無効にすることができませんでした。 原因を探るために以下のテストプログラムを作成しましたが、実行中にESCキーを押すと(長押しすると確実に) 「実行時エラー'1004' openメソッドは失敗しました。'Workbooks'オブジェクト」 のメッセージが表示されて止まってしまいます。 どこに原因があるのでしょうか? よろしくお願いします。 以下、テストプログラム ////////// Private Sub CbStart_Click() Dim Fname As String Dim Fpath As String Application.ScreenUpdating = False Application.EnableCancelKey = xlDisabled Fpath = "d:\work\" Fname = Dir(Fpath & "*.xlsx") Do While Fname <> "" Workbooks.Open Fpath & Fname CloseWorkbook Fname Fname = Dir() Loop Application.ScreenUpdating = True End Sub 以上 //////////////////

  • UWSCでキー入力を変数に代入する方法

    IFB GETKEYSTATE(VK_CTRL) PRINT "Ctrlキーが入力されたよ" ENDIF という風に決め打ちで何が押されたか確認する方法は分かったのですが、 SELECT KeyInput CASE VK_CTRL PRINT "Ctrlキーが入力されたよ" CASE VK_ESC PRINT "Escキーが入力されたよ" SELEND というように変数にキー入力を代入してから比較する方法が分かりません。 キー入力を変数に代入する方法はあるのでしょうか?

  • EXCEL2010 VBA 複数処理の終了

    EXCEL2010 VBAでコマンドボタンを押すと複数の処理を実行するようにしています。 Sub 実行() 処理A 処理B Ens sub 処理Aでは実行時に確認画面が出てNOを選択すると処理が終了するようにしています。 確認画面は下記の様な形です。 If MsgBox("処理を実行しますか?", vbYesNo + vbQuestion, "確認") = vbNo Then Exit Sub End If この処理Aの確認画面でNOを選択すると処理Aだけでなく処理Bも実行せず 終了するようにしたいのですが何か良い方法はないでしょうか? Exit Subにかわるすべての処理を終了させるコマンドがあれば良いのですが。。。

  • (Delphi)ESCキーでWindowを閉じたい

    TFormにTmemoが張り付けてあるだけのメモ帳を作り、 ESCキーを押すだけで終了できるようにしたかったのですが、 情報がなくて困っています。 1),Escキーの識別方法がわかりません。 Form上でKeypressを拾えばいいのかと思ったのですが、そもそもESCキーはどのように 識別させたらよいのでしょうか?? ヘルプにESCキーという項目があるのですが期待するような内容ではなくがっかりしました。 2)procedure節を任意に呼べるのか Formをクローズする際にある処理をしているので、できればFormCloseのprocedure節を呼べると良いと思うのですが、Delphiでこういうことはできるのでしょうか? よろしくお願いいたします。

  • 処理時間により、その後の処理の分岐をしたいのですが

    PHPスクリプト内にて、ある処理が例えば30秒以上かかった場合は、その瞬間にexit()やエラーをecho()というような 実装をしたいと思うのですが、どのように書けばいいのか思いつきません。 function hoge() { /* 処理内容 */ //α return $foo; } $foo = hoge(); //β があった場合、どこに、どのように書けばいいのでしょうか? 簡単に書けば、 $time = time(); if(time() - $time >30) { echo "時間超過"; } のような時間的処理分岐を入れたいと思うのですが。 αやβの前に$time = time();を置いたとしても、αの"処理内容"やβの関数実行の後にif(){}節を入れることになるので、 逐次処理のせいで、処理が15分かかった後とかにエラー出力とかになってしまいます。 自分は、何かをスクリプト中で実行し、その処理が30秒を超えた場合はエラーを出したいと考えております。 上記のような分岐方法でなくてもいいのですが、どのように書けばいいのかアドバイス頂けないでしょうか?

    • ベストアンサー
    • PHP
  • ESCキーを取得できない

    getchar() を使って文字入力時に、ESCキーが押されたら、そのプログラムを抜けるようにしたいのですが、 どうもラインバッファ処理のためかできなさそうです。 ただ、できるかできないかを知りたいだけです。 よろしくお願いします。

専門家に質問してみよう