人に聞けない痔の悩み、これでスッキリ >>

Beepと記述すると一回だけビープ音が鳴りますが、
ある処理をしている最中、ビープ音を鳴らすことは出来ますでしょうか?

A 回答 (2件)

    • good
    • 1

VBだとわかりません。


VBAの場合で回答します。

・Excel VBAだとこのように書けば繰り返されます。
実際にどのように使うのか考えて書き直してください。
Private Sub CommandButton2_Click()
Beep
Application.OnTime Now() + TimeValue("00:00:03"), "Sheet1.CommandButton2_Click"
End Sub

・WindowsMediaPlayerコントロールを使えばもっと簡単で
事前に再生回数を指定しておけます。
またメディアプレーヤーの機能の多くをプログラムから制御できます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qビープ音を連続して鳴らす

何か時間のかかる処理が終わったとき、ユーザーに処理が終わったことをビープ音で知らせたいと思います。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

何か時間のかかる処理が終わったとき、ユーザーに処理が終わったことをビープ音で知らせたいと思います。1回だと気付きにくいので3回「ピッピッピッ」と鳴らしたいのですが、Beep を3回記述しても鳴りません。苦し紛れに下記の関数を作って間に合わせているのですが、間隔を1秒とっているのでちょっと間延びした感じです。もっとリズミカルに鳴らしたいのですが、いい方法があったらどなたか教えてください。
--------------------------------------------------------------------
Public Function beep3...続きを読む

Aベストアンサー

再びmaruru01です。

間にSleepを入れないと出来ない(条件によっては3回に聞こえることもあるけど)ですよ。
っていうか、BeepとSleepで私の環境では出来ましたけど。(VB6.0SP5、Windows2000SP2)
あっそうだ、Beepの引数はWindows95、98では無視されます。
では。

QVBA で警告音

VBAで警告音を鳴らす際にBeepを使っています。
このたび、3種類の警告音が必要なったのですが、VBAのBEEPの場合
「一般の警告」がなるだけなので、数種類の警告音が出来ません。
何か良い方法はありませんか?

Aベストアンサー

警告音(「メッセージ (警告)」や「メッセージ (情報)」)を直接出すのでしたら、既出の質問で回答されて
いる、APIを使用します:
http://oshiete1.goo.ne.jp/qa747208.html


なお、APIに慣れていなくて敷居が高く感じられるようでしたら、SendKeys関数とMsgBoxで擬似的に
やってしまうというのもひとつの手だと思います。
試しに、現在の「Beep」の記述を、以下のコード(コメントを除けば実質2行)に置き換えてみて下さい:

 '「Enter」キーの信号(?)を送信します
 SendKeys "{Enter}", False
 '「システム エラー」の音を出します
 '(MsgBox自体は、上でのEnterで自動的に閉じられます:たまに残ることがありますが(汗))
 MsgBox "", vbCritical


・・・以上です。
なお、MsgBox関数の「vbCritical」を、「vbInformation」にすれば「メッセージ (情報)」の音に、
「vbExclamation」にすれば「メッセージ (警告)」の音に、それぞれ変えることができます。
(実際に鳴る音は、Windows側の設定に依存するので注意:
 コントロールパネルの「サウンドとオーディオデバイス」等で「システム エラー」時の音を変えると、
 Access側で鳴る音も変わります)

本来ならMsgBoxに表示するアイコンの切替用の引数ですし、SendKeysは時に予想外の
動作をすることがあるということで、あまりお勧めはできませんが、こんな方法もあるという
ことで、ご参考まで。

警告音(「メッセージ (警告)」や「メッセージ (情報)」)を直接出すのでしたら、既出の質問で回答されて
いる、APIを使用します:
http://oshiete1.goo.ne.jp/qa747208.html


なお、APIに慣れていなくて敷居が高く感じられるようでしたら、SendKeys関数とMsgBoxで擬似的に
やってしまうというのもひとつの手だと思います。
試しに、現在の「Beep」の記述を、以下のコード(コメントを除けば実質2行)に置き換えてみて下さい:

 '「Enter」キーの信号(?)を送信します
 SendKeys "{Enter}", False
 '「...続きを読む

QBeep音を出すには?

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'Beep音を出す
Dim I As Integer
For I = 1 To 100 ' Loop 100 times.
Beep() ' Sound a tone.
Next I

End Sub
上記のコードでBeep音を出したいのですが、鳴りません。
(Beepコードは、VBのサンプルコードです。)
OS:WinXP SP3
VB.NET Ver2003です。

フォームにコマンドボタンを一つ貼り付け、
コマンドボタンのクリックイベントで
Beep音を鳴らしたいです。

PCのデバイスマネージャ設定は、
Beep音が有効になっています。
他の音(Win立上音他)は、デフォルトのままです。

詳しい方、教えて下さい。

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'Beep音を出す
Dim I As Integer
For I = 1 To 100 ' Loop 100 times.
Beep() ' Sound a tone.
Next I

End Sub
上記のコードでBeep音を出したいのですが、鳴りません。
(Beepコードは、VBのサンプルコードです。)
OS:WinXP SP3
VB.NET Ver2003です。

フォームにコマンドボタンを一つ貼り付け、
コマンド...続きを読む

Aベストアンサー

Windows APIを使う方法

Enum MessageBeepType
SimpleBeep = -1
MB_OK = &H0
MB_ICONHAND = &H10
MB_ICONQUESTION = &H20
MB_ICONEXCLAMATION = &H30
MB_ICONASTERISK = &H40
End Enum

<System.Runtime.InteropServices.DllImport("user32.dll")> _
Shared Function MessageBeep(ByVal uType As MessageBeepType) As System.Boolean
End Function

で、Beep()のところを、MessageBeep(MessageBeepType.SimpleBeep)にします。

Qビープ音をなめらかに鳴らしたい

// まずソースをご覧ください[C#]
// ビープ音で和音を出す
private void start_Click(object sender, EventArgs e)
{
for (int i = 0; i < 100; i++)
{
// 1600分音符をforでまわしてドミソの和音に聞こえるようにしてみる
Play2("C", 1600);
Play2("E", 1600);
Play2("G", 1600);
}
}
protected static void Play2(string note,int lenght)
{
Dictionary<string, int> onkai = new Dictionary<string, int>();
onkai["REST"] = 0;
onkai["GbelowC"] = 196;
onkai["A"] = 220;
onkai["A_"] = 233;
onkai["B"] = 247;
onkai["C"] = 262;
onkai["C_"] = 277;
onkai["D"] = 294;
onkai["D_"] = 311;
onkai["E"] = 330;
onkai["F"] = 349;
onkai["F_"] = 370;
onkai["G"] = 392;
onkai["G_"] = 415;
//ビープ音を鳴らす
Console.Beep((int)onkai[note], 1600 / lenght);
 }

このソースをコンパイルしてもうまくいきませんでした
プルルルルルルルル・・・という連続音になるだけで和音になりません><
Console.Beepを使うと必ず前後に空白が入るらしいので他の方法をさがしてみましたがお手上げです
ご教授よろしくお願いします^^;

// まずソースをご覧ください[C#]
// ビープ音で和音を出す
private void start_Click(object sender, EventArgs e)
{
for (int i = 0; i < 100; i++)
{
// 1600分音符をforでまわしてドミソの和音に聞こえるようにしてみる
Play2("C", 1600);
Play2("E", 1600);
Play2("G", 1600);
}
}
protected static void Play2(string note,int lenght)
{
Dic...続きを読む

Aベストアンサー

C#に関してはあまり知識がないのですが、ソースを拝見したところ実行結果としてC音とE音をG音(ドミソ)と100回なってませんか??
だとしたらプログラムの記述どおり処理されています。(和音には残念ながらなりません。)

きっとBeepはシステム依存になってしまうのでシステムの仕様などが分かればそれなりの回答も出来るのですが…。
音源の仕様が和音を出せる仕様なのであれば、きっと鳴らしたい音をためて一気にPlayするようなメソッドがあるような気がします。

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

QエクセルVBAでBeep音は?

エクセル2000、Win2000です。
VBAで音を出そうと、下記のマクロを記述しました。
ところが、「MsgBox i & "回実行しました。」の部分を、コメントブロックしたら一回しか鳴りません。ビー、ビー、ビーと三回鳴ると思ったのですが、どうしてでしょうか?

Sub sound()
Dim i As Integer
For i = 1 To 3
Beep
'MsgBox i & "回実行しました。"
Next i
End Sub

Aベストアンサー

こんにちは。maruru01です。

間隔が短すぎるからでは?

適当にWaitをかけてはどうですか?
以下では1秒間を空けて鳴らします。


Sub sound()

  Dim i As Integer
  Dim StartTime As Single

  For i = 1 To 3
    StartTime = Timer
    Do While Timer < StartTime + 1
      DoEvents
    Loop
    Beep
    'MsgBox i & "回実行しました。"
  Next i

End Sub

QスピーカーがついていないPCでbeep音を鳴らすには?

昔のパソコン(windowsNTとかの時代)は
beep音が鳴っていた気がするのですが、
最近のパソコンはスピーカーがついていないと
全く音がでない気がします。
(富士通とかのメーカー製)

visualbasicでbeep音を出すにはスピーカーがどうしても
必要なのでしょうか?

マザーボード(?)から音は出せないでしょうか。

機種は FMV-E630 です。
FMV-830MG でもいいです。

とにかくどんな機種でもいいので
スピーカー無しで何らかの音を発生させることは
できないでしょうか?

Aベストアンサー

通常はマザーボードにスピーカーが乗っています。

そちらも無いとしたら、物理的に音が出る事はありえないのでは?

・電源投入時にも無音?
・BIOSなんかでoffになっているとか?
・サウンドカード(チップ)が有効になっていて、PCは音の信号を出しているが、スピーカーが無いので聞こえないだけとか?

BIOS設定を確認し、サウンドカードの機能を切り離して「なし」の状態にすれば、自動的にbeep音が選ばれていた気がします。

--
・ドットインパクトプリンタの印字音
・FDドライブのヘッドを制御して
・CMTのリレースイッチの音
とかで音楽を演奏するってキワモノも昔はあった気がします。

QVisual Basic でのコードをASCII変換、16進変換したものを元に戻す方法を教えてください

string(9)のエリア"Aa1アあa "の文字を1文字ずつASCII変換して、16進変換し、string(18)のエリアに格納します
すると"416131B182A08281202020"と変換されます
(一文字ずつ Hex(Asc(Buf))を使用しました)

逆に、"416131B182A08281202020"を"Aa1アあa "に戻したいのですが、
どのような関数を使えばよいのかわかりません。
困っています。教えてください。よろしくお願いいたします。

Aベストアンサー

VB既存の関数ではできないと思うので、自分で関数を作るなりしてください。

ヒントです。
ASC関数により変換された2バイト文字(シフトJIS)の1バイト目は81~9FおよびE0~FC(すべて16進)になります。
16進数から10進数に戻すには、頭に"&H"をつけます。(&H82A0 = 「あ」のシフトJISコード)
文字を数字に変換するのはVal関数、数字(文字コード)から文字に変換するのはChr関数です。

Qパソコン音声のミュートをVBAから制御するマクロ

パソコンの音声のミュートをエクセルVBAで制御する方法を教えてください。
設定した条件になるまでミュートし、条件に適ったらオンにしたいと思いますが、VBAの知識だけではどうしようも無いようです。
WAVEファイルを鳴らすことは出来ましたが種類が多くまとめて制御したいと思います。
宜しくお願いします。

Aベストアンサー

ざっと調べてみましたが、どうも一筋縄ではいかないようですね。
私なら、いっそのこと音量を制御するソフトをShell関数で呼びます。

例えば、
■Windows Volume Controller (WVC)
http://www.vector.co.jp/soft/win95/art/se380707.html
なんてソフトがありますが、
WVC.exe が C:\Program Files\Tools にあるとして、
'-----------------↓ ココカラ ↓---------------------
Sub Sample1()
 'マスタ音量を0に
 Shell "C:\Program Files\Tools\WVC.exe a0", vbHide
End Sub

Sub Sample2()
 'マスタ音量を50に
 Shell "C:\Program Files\Tools\WVC.exe a50", vbHide
End Sub
'-----------------↑ ココマデ ↑---------------------
(WinXP-Excel2003環境で動作確認済)

もっとも、上記ソフトに関しては、
ミュートのON/OFF自体を切り替えるオプションがありませんし、
現在の音量を取得することもできないので、
「元の状態に戻す」ことはできません。

■ボリュームリセット
http://www.vector.co.jp/soft/winnt/art/se312770.html
の方は、デバイス単位の制御はできませんが、
あらかじめミュート状態のデータファイルを用意しておけば、
現在の状態を記録⇒ミュート状態に移行⇒記録した状態に復帰
といった制御も可能だと思われます。

その他、より明示的にミュートのON/OFFを直接切り替えるソフトも
探せばあるのではないかと思います。

別のアプローチとしては、
sndvol32を開いてSendkeysで制御というのも考えましたが
'-----------------↓ ココカラ ↓---------------------
Sub Sample3()
 Shell "sndvol32", vbHide
 SendKeys "%(M)", True
 SendKeys " ", True
 SendKeys "%{F4}", True
End Sub
'-----------------↑ ココマデ ↑---------------------
ウェイトをかけるなどしてうまく同期させないと、
きちんと動作しない場合がありますし、遅い印象です。

以上、ご参考まで。

ざっと調べてみましたが、どうも一筋縄ではいかないようですね。
私なら、いっそのこと音量を制御するソフトをShell関数で呼びます。

例えば、
■Windows Volume Controller (WVC)
http://www.vector.co.jp/soft/win95/art/se380707.html
なんてソフトがありますが、
WVC.exe が C:\Program Files\Tools にあるとして、
'-----------------↓ ココカラ ↓---------------------
Sub Sample1()
 'マスタ音量を0に
 Shell "C:\Program Files\Tools\WVC.exe a0", vbHide
End Sub

Sub Sample2()
...続きを読む

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報