その他関連のテクニック

サウンドを再生する

(Excel 97/2000/2002/2003/2007)
処理が終わるまでに長い時間のかかるマクロがあったとします。
時間に余裕があって、マクロが終わるのをパソコンの前で待っていられたらいいのですが、何かと忙しい現代人は、そうもいきません。
マクロが終わるまでの時間に、何か別のことをしたくなります。
そんなとき、マクロが終了したことを音で伝えられたら便利です。

Windowsには、音楽を再生する機能がたくさんあります。
標準で付属するMedia Playerも、そのひとつです。
このMedia PlayerをVBAから起動して、音楽を再生してみましょう。
起動するのは、派手なエフェクト機能などが搭載されて、何かというと、すぐネットに接続したがる高機能なMedia Playerではなく、昔のWindowsで使われていた、控えめでシンプルで使いやすいMedia Playerです。
ここでは、Windows起動音としてお馴染みの「ジャジャ〜ン」を再生してみます。
「ジャジャ〜ン」の正体は、C:\Windows\Media\tada.wavです。
当たり前ですが、このファイルが存在しないと再生できません。

Sub Sample1()
  Const SoundFile As String = "C:\Windows\Media\tada.wav"
  If Dir(SoundFile) = "" Then
    MsgBox SoundFile & "がありません。"
    Exit Sub
  End If
  Shell "mplay32.exe /play /close " & SoundFile
End Sub   
起動したMedia Playerの実体はmplay32.exeです。 一般的に、mplay32.exeが保存されているフォルダにはパスが通っていますので、上のようにファイル名だけでも実行できます。 オプションで指定した「/play」は、続くサウンドファイルをただちに再生せよという命令です。 ただし、そのままでは起動したMedia Playerが残ってしまいますので「/close」を指定して、再生が終了したらMedia Playerを終了するようにしています。 Mplay32.exeが存在しない環境では、しかたないのでAPIを使いましょう。
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

Sub Sample2()
  Const SoundFile As String = "C:\Windows\Media\tada.wav"
  If Dir(SoundFile) = "" Then
    MsgBox SoundFile & "がありません。"
    Exit Sub
  End If
  mciSendString "Play " & SoundFile, "", 0, 0
End Sub