dポイントプレゼントキャンペーン実施中!

VBAでシステム音を鳴らす方法
を教えてください。

簡単な方法として
http://www.start-macro.com/55/w/s077.html

beep
BeepAPI Lib "kernel32.dll" Alias "Beep"

という二つの方法がありますが、

この音ではなくwindowsの警告音や起動音やシャットダウン音などの
システム音が使いたいのですがどうすれば良いでしょうか?
検索しても分かりませんでしたので
どなたか教えてください。

A 回答 (3件)

少し修正。


標準モジュールには
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
  (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

  Private Const SND_SYNC = &H0 '同期的、演奏が終了するまで呼び出し元に制御は戻りません。
  Private Const SND_ASYNC = &H1 '非同期的、すぐに制御が戻ります。
  Private Const SND_NODEFAULT = &H2 '指定したファイルが無い場合でも、既定の音を鳴らしません。
  Private Const SND_LOOP = &H8 'ずっと繰り返し演奏します。
  Private Const SND_NOSTOP = &H10 '既に演奏中であれば何もしません。

Sub playSound(Optional soundFile As String = "c:\windows\media\chimes.wav")
  Dim retVal As Long
  retVal = sndPlaySound(soundFile, SND_ASYNC + SND_NODEFAULT)
End Sub

Sub stopSound()
  Dim retVal As Long
  retVal = sndPlaySound(vbNullString, SND_NODEFAULT)
End Sub
としておいて、

実際に呼び出す場合は
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$A$1" Then
    Call playSound("C:\Windows\Media\Windows Exclamation.wav")
  End If
End Sub
などとしておけば良いかと。
Call playSound とだけ指定すればチャイムが鳴ります。
(当方、Windows7 64bit & Excel2010 32bit)
    • good
    • 0

msgbox "vbInformation の音", vbInformation という超手抜きは置いといて。


mciSendString の方が色々と細かい設定が出来るのですが、
鳴らすだけでしたら、sndPlaySound で十分かと思います。
但し、wav ファイル限定です。
以下を標準モジュールにてお試しを。
wav ファイルは、c:\windows\media\ に色々とあります。

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

Const SND_SYNC = &H0 '同期的、演奏が終了するまで呼び出し元に制御は戻りません。
Const SND_ASYNC = &H1 '非同期的、すぐに制御が戻ります。
Const SND_NODEFAULT = &H2 '指定したファイルが無い場合でも、既定の音を鳴らしません。
Const SND_LOOP = &H8 'ずっと繰り返し演奏します。
Const SND_NOSTOP = &H10 '既に演奏中であれば何もしません。

Sub playSound()
  Dim retVal As Long
  Dim soundFile As String
  
  soundFile = "c:\windows\media\chimes.wav"
  retVal = sndPlaySound(soundFile, SND_ASYNC + SND_NODEFAULT)
End Sub

Sub stopSound()
  Dim retVal As Long
  retVal = sndPlaySound(vbNullString, SND_NODEFAULT)
End Sub
    • good
    • 0

こんにちは。



Declare Function MessageBeep Lib "user32.dll" (ByVal wType As Long) As Long

http://chokuto.ifdef.jp/urawaza/api/MessageBeep. …

がありますが、

たぶん、こちらがわでしょうね。
Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

ret =mciSendString("Play " & SoundFile, "", 0, 0)
SoundFileに、「C:\Windows\Media\」 から選んだものを設定すればよいです。
ただ、こちらで試すと、鳴るものとそうでないものがあるようです。
こちらで試した限りは、反応がすこぶる鈍いです。

一度、Dir *.wav でリストを出したもので使うとよいでしょう。
    • good
    • 1

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

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