Excel VBA質問箱 IV

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

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


8738 / 13646 ツリー ←次へ | 前へ→

【31279】5秒ごとにフォームを出す方法 あゆ 05/11/16(水) 15:40 質問[未読]
【31289】Re:5秒ごとにフォームを出す方法 Kein 05/11/16(水) 16:49 発言[未読]
【31468】Re:5秒ごとにフォームを出す方法 あゆ 05/11/22(火) 12:07 質問[未読]
【31470】Re:5秒ごとにフォームを出す方法 Kein 05/11/22(火) 12:21 回答[未読]
【31471】Re:5秒ごとにフォームを出す方法 あゆ 05/11/22(火) 12:56 質問[未読]
【31472】Re:5秒ごとにフォームを出す方法 Kein 05/11/22(火) 13:09 回答[未読]
【31474】Re:5秒ごとにフォームを出す方法 あゆ 05/11/22(火) 13:24 お礼[未読]
【31478】Re:5秒ごとにフォームを出す方法 あゆ 05/11/22(火) 15:33 質問[未読]

【31279】5秒ごとにフォームを出す方法
質問  あゆ  - 05/11/16(水) 15:40 -

引用なし
パスワード
   こんにちは☆今問題を制限時間5秒で解くようにするため、5秒経ったら、”時間切れです”とかをかいたフォームを表示したいのですが、うまくいきません。下のように標準モジュールに書きました。
Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Public Const SND_SYNC = &H0
Public Const SND_ASYNC = &H1

Public Sub Auto_Close()
    Application.OnTime EarliestTime:=wktime _
             , Procedure:="StartOnTime" _
             , Schedule:=False
End Sub
Public Sub StartOnTime()
    wktime = Now() + TimeValue("00:00:05")
    s = sndPlaySound("C:\Documents and Settings\enokiz\My Documents\効果音\bubu.wav", SND_ASYNC)
    時間切れ.Show (vbModeless)
    Application.OnTime EarliestTime:=wktime _
             , Procedure:="StartOnTime"
End Sub
見にくくなってしまってごめんなさい。
実行して問題を解いて5秒経っても何もでてきません。どなたかご教授ください。お願いします☆

【31289】Re:5秒ごとにフォームを出す方法
発言  Kein  - 05/11/16(水) 16:49 -

引用なし
パスワード
   イマイチ何をしようとしているのか分からないので、OnTimeの再帰呼び出しをする
マクロを提示しておきます。このマクロの中で、変数 Lst の値は処理を繰り返す
時間を指定し、OnTime の引数の TimeValueの値で実行間隔を指定します。
処理を実行するのは Sub SC_Start() を一回のみで結構です。
やってみて、ご自分のマクロにどのように組み入れたらよいか、検討してみて下さい。

Declare Function sndPlaySound Lib "winmm.dll" Alias _
"sndPlaySoundA" (ByVal lpszSoundName As String, _
ByVal uFlags As Long) As Long

Public Const SND_SYNC = &H0
Public Const SND_ASYNC = &H1

Sub SC_Start()
  Dim Lst As Date
 
  Lst = Time + TimeValue("00:00:15")
  Call MySC(Lst)
End Sub

Sub MySC(Lst As Date)
  Application.OnTime Time + TimeValue("00:00:05"), _
  "'Ck_File" & """" & Lst & "'"
End Sub

Sub Ck_File(Lst As Date)
  Dim Ret As Long
  Const Ph As String = _
  "C:\Documents and Settings\enokiz\My Documents\効果音\bubu.wav"

  If Time > Lst Then
   MsgBox "処理時間が経過したので終了します", 64: Exit Sub
  End If
  Ret = sndPlaySound(Ph, SND_ASYNC)
  Call MySC(Lst)
End Sub

あと、指定した秒数だけ出せる MsgBox があります。↓

 Dim WshShell As Object
 Set WshShell = CreateObject("WScript.Shell")
 WshShell.Popup "テストです。5秒間表示します", 5
 Set WshShell = Nothing

必要なら、これもうまく組み入れたら良いと思います。

【31468】Re:5秒ごとにフォームを出す方法
質問  あゆ  - 05/11/22(火) 12:07 -

引用なし
パスワード
   keinさん、実際に実行してみて感動しました!!これが私の実現したかったことです☆これを組み込もうと思い、実際に自分のVBAの標準モジュールにkeinさんのプログラムをいれ、実行1に
 Private Sub userform_initialize()
   Call MySC(Lst)
 End Sub
と書いて実行しました。実行1上で何の操作もしないで5秒経つと、音はならないもののメッセージボックスが出ました!!(Call SC_Startとすると、5秒ごとに音が鳴り続けました。。)嬉しいです☆音も一緒になるようにするにはどのようにすればよいのでしょうか?また、教えていただけないでしょうか。

【31470】Re:5秒ごとにフォームを出す方法
回答  Kein  - 05/11/22(火) 12:21 -

引用なし
パスワード
   >音はならないもののメッセージボックスが出ました
で、
>音も一緒になるようにするにはどのようにすれば
ということからすると「メッセージが出るときにも何かの音を鳴らしたい」
という意味でしょーか ? それなら

If Time > Lst Then
  Ret = sndPlaySound(任意の音声ファイルのフルパス, SND_ASYNC)
  MsgBox "処理時間が経過したので終了します", 64: Exit Sub
End If
 
というように追加するだけのことですが・・。

【31471】Re:5秒ごとにフォームを出す方法
質問  あゆ  - 05/11/22(火) 12:56 -

引用なし
パスワード
   keinさん鳴りました!!
>  Ret = sndPlaySound(任意の音声ファイルのフルパス, SND_ASYNC)
を追加すればよかったんですね☆ほんとぉーにありがとうございました☆
メッセージボックス特有の音も一緒になるのですが、この音を消すことは可能ですか?

【31472】Re:5秒ごとにフォームを出す方法
回答  Kein  - 05/11/22(火) 13:09 -

引用なし
パスワード
   それはたぶん、OSが設定している範囲の問題でしょう。OSの「スタート」「設定」
「コントロールパネル」で"サウンドとマルチメディア"(スピーカーの図柄のアイコン)
を開いて、サウンド・タブの「メッセージ」のところに付いているチェックを外せば
よいと思います。(当方のOSはWin2000です)

【31474】Re:5秒ごとにフォームを出す方法
お礼  あゆ  - 05/11/22(火) 13:24 -

引用なし
パスワード
   メッセージボックスの音が鳴らずに、ブーという音だけがなるようになりました☆本当に助かりました。細かく教えていただき、本当にありがとうございましたm○m

【31478】Re:5秒ごとにフォームを出す方法
質問  あゆ  - 05/11/22(火) 15:33 -

引用なし
パスワード
   お礼を書いた後ですが、また質問があります。
実行1フォームは、問題文と、4選択の解答ボタンから成る学習システムのパーツなのですが、(次の問題へ・前の問題へ・採点・ヒントボタンもあります)一問を解く時間を5秒としたいため、時間切れですとでる仕方を聞いていたのですが、今は「一問とく時間が」ではなく、「実行1が起動してから」5秒経ったら、ブーという音とメッセージが出てきます。そこで
Private Sub CommandButton5_Click() '解答Aボタンが押されたら'
  seikai = "A"
  Unload 問題の実行1
  If Lst <> "" Then
    Application.OnTime Lst, "MySC(Lst)", , False
  End If
  hantei (seikai)
End Sub
のように、If〜End Subの部分を解答ボタンのところに追加していったのですが、
次の問題にいくと5秒経っても何の反応もありません。どうしたらよいのでしょうか?教えてください。

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