MsgBoxではなくビープ音で知らせて欲しい

何かの処理が終わったときに「終わりましたよ」的なお知らせがあると助かりますが、一番手っ取り早いのはMsgBoxです。でも、MsgBoxだとVBAの処理も止まってしまうため、タイマーを使って10分毎や30分毎に処理をさせているようなケースでは困ってしまいます。例えば、Application.OnTimeを使って複数のタスクを一定時間毎に処理させているような場合ですね。

 

次に簡単なのはビープ音で知らせる。これはBeepで実現できます。聞き逃しを防ぐために5,6回鳴らすとよいでしょう。

    For i = 0 to 4

        Beep

    Next

 

でも、MP3を再生させて知らせるというのはどうでしょうか。好きな曲でもいいし、好きな声優の台詞をどこからか拾ってきてMP3ファイルに落としておけばいいわけです。VBAでMP3ファイルを再生させるにはShell関数を使ってメディアプレーヤーを立ち上げて、再生したいMP3ファイルを渡してやればいいんですが、メディアプレーヤーっていったいいつのアプリですか? ファイルの場所を調べるのも面倒だし、ダブルクォーツも面倒だし、そんなことするくらいならShellExecute WindowsAPI使ったほうが簡単です。MP3の保存場所もログインユーザーしかアクセスできないフォルダーではなく、パブリックな場所に置いておくとよいでしょう。

 

ShellExecuteの便利なところはファイル名を渡してやるだけで関連付いているアプリが勝手に起動するということです。URLを渡してやればブラウザーがそのページを開いてくれるし、.TXTファイルならメモ帳、.xlsならエクセルが開きます。

 

    Public Declare Function ShellExecute _
    Lib "shell32.dll" Alias "ShellExecuteA" ( _
    ByVal hWnd As Long, _
    ByVal Operation As String, _
    ByVal FileName As String, _
    Optional ByVal Parameters As String, _
    Optional ByVal Directory As String, _
    Optional ByVal WindowStyle As Long = vbMinimizedFocus _
    ) As Long


    Public Sub OpenUrl(strURL)
        Dim lSuccess As Long
        lSuccess = ShellExecute(0, "Open", strURL)
    End Sub

 

   Public Sub PlayJobDone()
        OpenUrl "C:\MP3\PaleBlueDot.mp3"
    End Sub