Excel VBA質問箱 IV

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

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


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

【37630】ループからの脱出 マキチャン 06/5/13(土) 11:19 質問[未読]
【37635】Re:ループからの脱出 Kein 06/5/13(土) 13:37 回答[未読]
【37639】Re:ループからの脱出 マキチャン 06/5/13(土) 15:38 質問[未読]
【37647】Re:ループからの脱出 よろずや 06/5/14(日) 7:53 回答[未読]
【37648】Re:ループからの脱出 マキチャン 06/5/14(日) 8:42 質問[未読]
【37649】Re:ループからの脱出 よろずや 06/5/14(日) 9:35 回答[未読]
【37652】Re:ループからの脱出 マキチャン 06/5/14(日) 10:55 お礼[未読]
【37656】ゲーム制御の一般的方式 電脳しゅん 06/5/14(日) 15:54 発言[未読]
【37663】Re:ゲーム制御の一般的方式 よろずや 06/5/14(日) 22:26 回答[未読]
【37697】Re:ゲーム制御の一般的方式 マキチャン 06/5/15(月) 21:30 お礼[未読]

【37630】ループからの脱出
質問  マキチャン  - 06/5/13(土) 11:19 -

引用なし
パスワード
     DO
    処理1
    処理2
    処理3
     ・
     ・
    処理N  
  LOOP
のように処理1〜処理Nを永久ループさせるプログラムを
ボタンに貼り付け、うごかします。ループ中に何らかの方法で
割り込みをかけて、割り込みがかかった時点で、処理Nまで
処理して、終わらせる方法はあるでしょうか?

できれば、STOPボタンを配置して、これを押すと、できるような
方法があれば、一番いいのですが。

ESCキーだと、まづ、どこで中断するか分からないのと、
継続とか、終了とか、デバックとか応答しなくてはならないし、
このメッセージBOXも表示させたくないので、これ以外で
何か、ループを終わらせる方法が考えられたら教えてください。

【37635】Re:ループからの脱出
回答  Kein  - 06/5/13(土) 13:37 -

引用なし
パスワード
   指定した秒数を過ぎると、自動的に閉じるメッセージボックス(PopUp)を使う、
という手があります。↓のプログラムを、空白シートを開いて実行してみて下さい。
メッセージが表示されている間(3秒ですが正確ではない)に「いいえ」のボタンを
押すと、最後の処理(E1:E30000に値を入力)が終わったあと、ループを抜けて
終了します。「はい」のボタンを押すか3秒経過するまで何もせずにいると、
処理が継続します。

Sub Test_Exit_Loop()
  Dim WshShell As Object
  Dim Ans As Integer, i As Integer
  Dim YNflg As Boolean
 
  Set WshShell = CreateObject("WScript.Shell")
  Do
    Range("A:E").ClearContents
    For i = 1 To 30000
     Cells(i, 1).Value = i
    Next i
    Ans = WshShell.Popup("処理を継続しますか", 3, "", 36)
    If Ans = 7 Then YNflg = True
    For i = 1 To 30000
     Cells(i, 3).Value = i
    Next i
    If Not YNflg Then
     Ans = WshShell.Popup("処理を継続しますか", 3, "", 36)
     If Ans = 7 Then YNflg = True
    End If
    For i = 1 To 30000
     Cells(i, 5).Value = i
    Next i
    If Not YNflg Then
     Ans = WshShell.Popup("処理を継続しますか", 3, "", 36)
     If Ans = 7 Then YNflg = True
    End If
  Loop Until YNflg
  Set WshShell = Nothing: MsgBox "終了します", 64
End Sub

【37639】Re:ループからの脱出
質問  マキチャン  - 06/5/13(土) 15:38 -

引用なし
パスワード
   ▼Kein さん:早速の回答ありがとうございます。
 なるほど、このようなこともできるのですね。メモさせてもらい、
 今後、役立たせてもらいます。ありがとうございました。
 
 ただ、私の質問の仕方が、悪かったようです。
 例えば、A1に”あ”という文字を表示し、それを消し、A2に”あ”を
 表示し、それを消し、・・・・ということを、例えばA1〜A30くらいまで
 次にB1〜B30ぐらいまで、C1からC30くらいまで・・・というように表示させたとすると
 文字”あ”が画面上を動いていくように見えますね。(もちろん早すぎるとは思います が、何らかの方法で遅くすれば)これをAからJくらいまでを移動することを繰り返し
 ループさせたとします。このとき、画面を見ながら、好きな場所に”あ”
 がきたときに、何らかの方法で、とめる方法が知りたかったのです。(ESCキー以外の 方法にて)こんなことはできないでしょうか。質問の仕方が悪くて申し訳ありません。




【37647】Re:ループからの脱出
回答  よろずや  - 06/5/14(日) 7:53 -

引用なし
パスワード
   (1) ループ内の各所に DoEvents をちりばめる。
(2) Escキー等の割り込み時にフラグを立てる。
(3) ループの最後でフラグを判定する。

【37648】Re:ループからの脱出
質問  マキチャン  - 06/5/14(日) 8:42 -

引用なし
パスワード
   ▼よろずや さん:回答ありがとうございます。
 なるほど、アイデアはこれでいけそうですね。
 ただ、VBAにあまり詳しくないので、

>(2) Escキー等の割り込み時にフラグを立てる。

 ここの部分の具体的なコーディングはどのようになるのでしょう?
 また、ESCキーを押したとき応答が必要なウインドウが出たりしないようなことも
 できますか?

【37649】Re:ループからの脱出
回答  よろずや  - 06/5/14(日) 9:35 -

引用なし
パスワード
   EnableCancelKey

【37652】Re:ループからの脱出
お礼  マキチャン  - 06/5/14(日) 10:55 -

引用なし
パスワード
   ▼よろずや さん:ありがとうございました。
         希望どうりに動かすことができました。

【37656】ゲーム制御の一般的方式
発言  電脳しゅん  - 06/5/14(日) 15:54 -

引用なし
パスワード
   この件、解決したようですが、今後のご参考になれば…

ゲームソフトのような制御をさせたいお考えと思いますが、一般的には、次のように制御します。

(1) 一定時間ごとにプログラム(プロシージャ)に制御が渡るようにOSを設定する。
(2) 制御が渡ったら、条件により次のような処理をして、すくにOSに制御を戻します。
 ・たとえばA1に"あ"をセットする。
 ・プログラムを終了(OSの設定をクリア)する。
 ・何もしない。

ここで、Excel VBAの関数では、1秒までしか制御できません。
それ以上の短時間の制御には、WindowsのAPIを使います。


Excel VBAの時間の関数の使い方は、メールマガジン「絶対わかる Excel VBA」のバックナンバー「第67〜第72 時計を作ろう(2006/1/24〜3/8)」が参考になります。

バックナンバーは下記より
http://blog.mag2.com/m/log/0000136145

【37663】Re:ゲーム制御の一般的方式
回答  よろずや  - 06/5/14(日) 22:26 -

引用なし
パスワード
   >ここで、Excel VBAの関数では、1秒までしか制御できません。

実は秒未満も制御できるということを最近知りました。
問題はNow関数が秒未満を返さないことだけとか。
代わりにワークシート関数を使うと秒未満も取得できるそうな。

【37697】Re:ゲーム制御の一般的方式
お礼  マキチャン  - 06/5/15(月) 21:30 -

引用なし
パスワード
   ▼電脳しゅん さん:ありがとうございます。
  とりあえず、やりたいことは、できたのですが、なかなか
  興味あることを教えていただき、今後の参考にさせていただきます。
  というか、研究(勉強)させてもらいたいと思います。
  ありがとうございました。

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