|
ご希望のものとは少し違うかも知れませんが、以前に他の掲示板で回答した内容を
貼り付けておきます。使えそうならちょっと改造するだけで済みますが・・。
----------------------------------------------------------------------
>キーを押すか、マウスが動くまで(スクリーンセーバーを解除する時と同じように)
>5秒ごとに音を鳴らし続ける
というコードは、いくつか考えられます。まず EnableCancelKeyの設定で
Escボタンが押されたことを検出し、xlInterrupt で即中止するかループを抜けて
エラー処理ルーチンへ飛ばす方法、これはキーを押すタイミングが、ループ内の
DoEvents で、OSに制御が移ったタイミングに合わないと動作がおかしくなるので、
一番ダメな方法です。次に OnTime で5秒後にマクロを呼び出し、音を出してから
呼び出し元のプロシージャを再帰呼び出しする方法ですが、これもやや不安が残ります。で、最も単純で確実だと考えたのが、以下のようなコードです。
Sub Test_TimeInt()
Dim WshShell As Object
Dim I As Integer, Ans As Integer
Set WshShell = CreateObject("WScript.Shell")
For I = 1 To 5
Beep
Ans = WshShell.Popup("マクロを中止しますか", 5)
If Ans = 1 Then Exit For
Next I
Set WshShell = Nothing: MsgBox "終了", 64
End Sub
これは、表示時間を制御できるメッセージボックスを出し、出ている間に OK を
クリック(キーなら Enterを押す)することで、ループを抜けるというものです。
メッセージは5秒間表示します。そのまま放っておくと自動的に引っ込んで、次の音を
鳴らします。5回繰り返したら終了するというわけです。
|
|