- 締切済み
エクセル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です。 バージョンによる鳴る鳴らないはなく、プロフェッショナル版では鳴り、パーソナルでは鳴らないは同じでした。ほかに調べることがありますでしょうか? プロフェッショナル版では鳴り、パーソナル版ではちがうのですか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。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) とします。 とりあえず、こんなところで。