アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル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です。
バージョンによる鳴る鳴らないはなく、プロフェッショナル版では鳴り、パーソナルでは鳴らないは同じでした。ほかに調べることがありますでしょうか?
プロフェッショナル版では鳴り、パーソナル版ではちがうのですか?

A 回答 (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)

  とします。


とりあえず、こんなところで。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!