ビープ音を連続して鳴らす
- 何か時間のかかる処理が終わったとき、ユーザーに処理が終わったことをビープ音で知らせたいと思います。
- 1回だと気付きにくいので3回「ピッピッピッ」と鳴らしたいのですが、Beep を3回記述しても鳴りません。
- 苦し紛れに下記の関数を作って間に合わせているのですが、間隔を1秒とっているのでちょっと間延びした感じです。もっとリズミカルに鳴らしたいのですが、いい方法があったらどなたか教えてください。
- ベストアンサー
ビープ音を連続して鳴らす
何か時間のかかる処理が終わったとき、ユーザーに処理が終わったことをビープ音で知らせたいと思います。1回だと気付きにくいので3回「ピッピッピッ」と鳴らしたいのですが、Beep を3回記述しても鳴りません。苦し紛れに下記の関数を作って間に合わせているのですが、間隔を1秒とっているのでちょっと間延びした感じです。もっとリズミカルに鳴らしたいのですが、いい方法があったらどなたか教えてください。 -------------------------------------------------------------------- Public Function beep3() Dim i As Integer Dim dend As Double For i = 1 To 3 dend = Timer + 1 Beep Do If Timer > dend Then Exit Do End If DoEvents Loop Next i End Function
- lily02
- お礼率66% (82/123)
- Visual Basic
- 回答数4
- ありがとう数1
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
再びmaruru01です。 間にSleepを入れないと出来ない(条件によっては3回に聞こえることもあるけど)ですよ。 っていうか、BeepとSleepで私の環境では出来ましたけど。(VB6.0SP5、Windows2000SP2) あっそうだ、Beepの引数はWindows95、98では無視されます。 では。
その他の回答 (3)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 WindowsAPIにも、「Beep」という関数があります。 APIのBeepは周波数(Hz)と秒数(ms)の2つの引数を持ってるので、音色(周波数)と鳴らす間隔(秒数)を調節出来ます。 各Beep間のインターバルはNo.2の方の通り、APIのSleepを使って調節出来ます。 どちらの関数も、MSDNライブラリーで詳細を参照して下さい。 関数の宣言はAPIビューアで取得して下さい。 では。
補足
ありがとうございます。 が、うまくいきません。 timer関数と同じで1回しか鳴りません。 周波数と間隔をいろいろと変えてやってみたのですが、3回Beepを記述しても1回しか鳴りません。
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、honiyonです。 確か Sleepという関数があったと思います。 Sleep(1000) で 1秒待ちという意味になります。 Beep Sleep(1000) Beep Sleep(1000) Beep でいかがですか? 参考になれば幸いです(..
補足
ありがとうございます。 が、うまくいきません。 timer関数と同じで1回しか鳴りません。
- todyssey
- ベストアンサー率32% (25/77)
あまりお役に立てないかも知れませんが timer は 小数点以下も利用できるはずです。 timer + 1 を timer + 0.3ぐらいにしてみては いかがでしょうか
補足
はい、1秒以下でも試しましたが、そうするとうまく3回鳴りません。 0.9以下でだめでした。ハードの周波数の問題とか聞きましたが、それをどうクリアしたらいいのか分かりません。
関連するQ&A
- シリアル通信:オフライン時にうまく終了してくれません
シリアルプリンタの制御をVB6で行っております。 以下のようなコードですが、うまく終了してくれません。 'グローバル 'プリンタの状態 Dim BUF as String '起動時 Private Sub Form_Load() MSComm1.PortOpen = True Text1.Text = "" Timer1.Enabled = True End Sub '終了 Private Sub Form_Unload(Cancel As Integer) Timer1.Enabled = False MSComm1.PortOpen = False End Sub 'タイマー Private Sub Timer1_Timer() Timer1.Enabled = False Call CheckPrint Timer1.Enabled = True End Sub Private Sub MSComm1_OnComm() Dim TimeOut As Long Dim sTime As Long Dim eTime As Long Select Case MSComm1.CommEvent '受信 Case comEvReceive TimeOut = 100 sTime = timeGetTime Do If (TimeOut - eTime) < 0 Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until MSComm1.InBufferCount >= 82 BUF = MSComm1.Input End Select End Sub プリンタの状態チェック Private Sub CheckPrint() Dim sTime As Long Dim eTime As Long Dim TimeOut As Long Dim i As Integer Dim n As Integer BUF = "" 'プリンタの情報取得コマンド MSComm1.Output = "~HS" 'タイマ開始 TimeOut = 400 sTime = timeGetTime eTime = 0 Do DoEvents If BUF <> "" Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until TimeOut - eTime < 0 If BUF <> "" Then ... .. 宜しくお願いします。
- ベストアンサー
- Visual Basic
- vb2005でプログラムをとめるコードは?
お世話になります。 vb2005でプログラムに5秒間、時間をとめようとおもいます。 これだとTimerにエラーがでてしまいます。 ('Timer' は型です。有効な式ではありません。) どこをどうなおせばエラーがでなくなるのでしょうか? 教えてください。お願いします。 Dim sngSt As Single sngSt = Timer Do While Timer - sngSt < 5 DoEvents() Loop
- ベストアンサー
- Visual Basic
- VB 2008: Do Whie...Loop文について
Function FileGetChar(ByVal f As String, ByVal p As Integer) As String Dim i As Integer = 1 Dim j As Integer = 0 Dim l As Integer Dim n As Integer = FreeFile() Dim c As Char If File.Exists(f) Then FileOpen(n, f, OpenMode.Random, OpenAccess.Read, , 1) l = FileLen(f) Do While (i + j <= l) FileGet(n, c, i + j) j = j - (Math.Abs(Asc(c)) > 255) i = i + 1 If i > p Then Exit Do Else c = "" End If Loop FileClose(n) End If Return c End Function [イミディエイトウインドウ] ? FileGetChar("D:\Temp\Test.txt",1) "1" ? FileGetChar("D:\Temp\Test.txt",2) "2" と、一応は動作しています。 l------->ファイル長 i+j----->読み込みのカレントポジション p------->読み込み指示ポジション 今、悩んでいるのはDo...Loop文中のIf Else End If の追放。 何か妙手があれば教えて頂きたい。
- ベストアンサー
- Visual Basic
- エクセルVBAの繰り返し処理の質問
C列にある項目とG列にある項目を比較して、 一致し、H列にある数字が10以上ならば、B列にフラグ1を立てる という処理を行いたいんですが、 下記ぐらいまでしか作れず、うまくいきません・・・ Sub フラグを立てる処理() Dim i As Integer Dim j As Integer Dim k As Integer i = 1 j = 1 Do j = j + 1 Do i = i + 1 If Cells(j, 8) > 9 Then Cells(i - 1, 4) = 1 End If Loop Until Cells(i, 3) <> Cells(j, 7) Or Cells(i, 3) = "" Loop Until Cells(j, 7) = "" End Sub わかる方がいらっしゃいましたら、お願いします。
- 締切済み
- Visual Basic
- VBAでスロットを作る
VBAでゲームを作ろうとしています。まず、手始めに簡単なスロットを作っています。スロットを回転させて止めるまではできたのですがメッセージを出す段階でメッセージが2回、0とiの値が出ます。次のコードなのですが、なぜできないのか、どうすればできるようになるのか教えてください。よろしくお願いします。 Sub SlotLoop_1() Dim i As Long Static Flg As Boolean Flg = Not Flg 'ボタンを使えるようにする With [a1] 'A1を選ぶ Do If Flg = False Then Exit Do i = (i + 1) Mod 10 '(i+1)を10で割った余り。 .Value = i DoEvents Loop End With MsgBox i 'ここが問題 End Sub
- ベストアンサー
- その他(プログラミング・開発)
- エクセルvba 値渡しのsubプロシージャ
お世話になります。 エクセルVBAにて、loop処理中にCALLかけている subが最初の一度だけしか呼べません。 なにか、特別にしなければならないことがあるのでしょうか。 こんな感じです。 dim i as integer sub main() i = 1 max = 5 do if day1 = day2 then 処理1 データ1, データ2 end if i = i + 1 loop until i = max end sub sub 処理1(Byval 引数1 as variant, 引数2 as variant) msgbox("引数1" & 引数1) msgbox("引数2" & 引数2) end sub データ1 及び データ2、 DAY1 DAY2は、必要に応じて 転送処理等やっています。
- ベストアンサー
- その他(プログラミング・開発)
- 再帰処理を用いて階乗を求めるプログラム
こんにちは 再帰処理を用いて階乗を求めるプログラムについて の質問です。 以下のように考えたのですが、 まったく駄目なようです。 どこをどのように直したらいいのか いまいちわかりません。 どなたか教えて下さい。お願いします。 Private Sub CommandButton1_Click() Dim n As Integer 階乗する数 Dim f As Integer 階乗する数の階乗した値 n = Val(TextBox1) Do While f > 1 KEISAN n, f Loop TextBox2 = f End Function Function KEISAN(n, f) If n <= 1 Then f = 1 Else f = n * f(n - 1) End If End Function
- ベストアンサー
- Visual Basic
- 素数を求めるマクロを
走らすと暴走したようになり、素数=151で止まります。 どこが悪いのでしょうか。正常に終わるようにしたいです。 ====================== Sub 素数を求める() Dim i As Long Dim j As Long Dim m As Long Dim p As Long Dim flg As Boolean i = 1 j = 1 p = 2 Do flg = False For m = 2 To Int(Sqr(p)) If p Mod m = 0 Then flg = True Exit For End If Next If flg = False Then Cells(i, j) = p i = i + 1 If i > Rows.Count Then i = 1 j = j + 1 End If End If p = p + 1 Loop End Sub ======================
- 締切済み
- Excel(エクセル)
- エクセルのマクロでLoopを使うと応答なしになり…
エクセル2010でタイマーを作って作動させるとかならず応答なしになります。Sleepも使ったのですが応答なしになりました。そうなった理由をできれば教えてください。よろしくお願いします マクロ Sub macro() Dim EndTime As Long Dim PassTime As Long EndTime = Timer + Range("c6").Value * 60 + Range("E6").Value Do PassTime = Timer Range("c6").Value = (EndTime - PassTime) \ 60 '分 Range("e6").Value = (EndTime - PassTime) Mod 60 '秒 Loop Until EndTime - PassTime <= 0 Beep MsgBox "時間だよ" End Sub
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございました。 自宅のパソコンは98なので、うまく動きませんでした。 仕事先では2000で、2000上で動かすアプリで使用したかったので大助かりです。