Waveファイル名を変数で指定して再生するには?

Question 55.5 Previous Next
詳細は こちら 500連発第2弾214番の 「Waveファイルの連続再生」に関して質問します。
サンプルVBAではファイルを選択してWaveの再生をしてますが、予め決められたもの(Wave名をマクロ内に記述済み)を再生するには、どのように記述するのでしょうか?
本は赤表紙、青表紙とも購入してあります。以上宜しくお願い致します。  
Answer   Copyright (C) 2002.9.19 永井善王
500連発をご活用、また、赤表紙、青表紙と親しみあるお言葉、ありがとうございます。第2弾214番は遠山文雄氏の作品ですが、監修担当の私宛に質問されましたのでお答えします。
なお、どの程度改造されたいのか不明ですので、質問内容に直接関係する部分だけになります。

Waveファイルの再生には、Win32API関数を使用しています。マクロの本体は、標準モジュールの中に遠山氏が「wav音を再生するためのWinAPI関数関連」とコメントされている部分(15行)です。そして、それに対して、どのファイルを再生するのか指示を与えているマクロが、ユーザーフォームのコードの末尾に下図のとおり作成されています。
Private Sub ListBox1_Click()
Dim resL As Long

    '指定したパスが正常なら音楽を鳴らす
    'そうでなければタイトルにメッセージを表示
    resL = PlaySound(ListBox1.Value, 0, SND_ASYNC)
        If resL = 0 Then
            Me.Caption = "認識出来ない形式です"
            Exit Sub
        End If
        
    'リストボックスにファイル名を表示
    'リストボックスのValue プロパティとTextプロパティーでは返す値が違います
    'フルパスを返すか、ファイル名を返すかの違いです
    Me.Caption = ListBox1.Text

End Sub
この中の上から 6行目にある resL = PlaySound(ListBox1.Value, 0, SND_ASYNC) というコードが、Win32API関数に再生を指示しています。
ご希望は「予め決められたものを再生」すればよい「Wave名をマクロ内に記述済み」とのことですので、標準モジュールに次のようなマクロと、前記の15行ほどのWin32API関数を作成すれば実現するかと考えます。
'------------------------------------------------------------------------------
Sub Waveファイル名を変数で指定して再生する()
Dim resL As Long
Dim パス As String
Dim ファイル名 As String
    パス = "C:\WINDOWS\MEDIA\"              'これはWindowsのフォルダーです
    ファイル名 = "Tada.wav"                  'このサウンドはWindowsXPとMeにもあります
    resL = PlaySound(パス & ファイル名, 0, SND_ASYNC)
End Sub
'------------------------------------------------------------------------------
6行目の パス = "C:\WINDOWS\MEDIA\" と7行目の ファイル名 = "Tada.wav" を適宜置き換えてください。
お礼
早速のご回答ありがとうございました、試した結果思い通りになりました。
今回は秒単位のタイマーをExcelで作成し、指定秒経過後、Beep音を鳴らしますが、秒設定が2っ以上の場合、音の区別が付きにくいのでWaveを使いました。 どうもありがとうございました。

 

Excel VBA Macro