• 締切済み

エクセルVBAで音楽を鳴らしたいのですが。

エクセルVBAを使って、音楽を鳴らすプログラムを書いています。 Public Sub start_bgm() If Dir(ActiveWorkbook.Path & "\music\" & bgm1) = "" Then Else mciCommand = "Open " & ActiveWorkbook.Path & "\music\" & bgm1 & " alias MP3" Call mciSendString(mciCommand, mciRetString, Len(mciRetString), 0) mciCommand = "Play MP3" Call mciSendString(mciCommand, mciRetString, Len(mciRetString), 0) End If End Sub とかいて、プロフェッショナル版ではうまくいきましたが、パーソナル版では音が鳴りません。 指定された場所に音楽ファイルはあります。 WINMM.DLLもあります。 5台のPCで試しましたが、OSは全てXPで、EXCELはXP か2003です。 バージョンによる鳴る鳴らないはなく、プロフェッショナル版では鳴り、パーソナルでは鳴らないは同じでした。ほかに調べることがありますでしょうか? プロフェッショナル版では鳴り、パーソナル版ではちがうのですか?

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。KenKen_SP です。 >プロフェッショナル版では鳴り、パーソナル版ではちがうのですか? OFFICE のプロフェッショナル版とパーソナル版で搭載されている VBA に相違があるといった話は今のところ聞いたことはありません。 Win32API の mciSendString 関数は、関数が正常に終了した場合は0を 返し、それ以外の場合はエラーコードを返します。したがって、 lngRET = mciSendString(mciCommand, vbNullString, 0, 0) として、変数 lngRET に 0 が返れば成功、0以外ならエラーと判定でき ます。mciSendString 関数の返すエラーコードのテキスト記述を取得す るには、この戻り値を mciGetErrorString 関数に渡します。 mciGetErrorString 関数を Web で調べてみて下さい。エラーの原因が特 定できると思います。 その他、気になる点を幾つか、、 1. パスに含まれるスペース   mciSendString 関数の第一引数 lpstrCommand はスペースを区切り   文字に使っています。したがって、サウンドファイルのフルパスに   スペースが含まれる場合は、パスをダブルコーテーションで括る必   要があります。   > mciCommand = "Open " & ActiveWorkbook.Path & ~   ActiveWorkbook.Path で得られるパスに下記の様なスペースが含ま   れる場合、これをそのまま mciSendString 関数に渡すとエラーと   いうか「サウンドが鳴らない」状態になりますね。   例) C:\Documents and Settings\<ユーザー名>\デスクトップ\~   変数 bgm1 (定数?)が良くわからないのですが、   mciCommand = "Open " & Chr(34) & ActiveWorkbook.Path & _          "\music\" & bgm1 & Chr(34) & " alias MP3"   のようにダブルコーテーションを補完してみて下さい。 2. mciSendString(mciCommand, mciRetString, Len(mciRetString), 0)   このステートメント内の Len 関数の使いかたでは正しくバイト数を   返せないと思います。「サウンドの再生」が目的であれば、これら   の情報は必要ないので、次のように Null を渡します。   mciSendString(mciCommand, vbNullString, 0, 0)   これらの情報が必要であれば、   Const cstLEN_ERRSTR = 256   Dim mciRetString * cstLEN_ERRSTR   と宣言しておいてから、   mciSendString(mciCommand, mciRetString, cstLEN_ERRSTR, 0)   とします。 とりあえず、こんなところで。

関連するQ&A