
エクセル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件)
- 最新から表示
- 回答順に表示
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OCXのライセンス
-
エクセルVBA フォームを開く時...
-
【Excel VBA】PDFを作成して,...
-
Excel VBA シートを指定して...
-
FFFTPでサーバに新規フォルダが...
-
Refreshで落ちる
-
ブラウザでASPファイルを開こう...
-
複数のテキストファイルをexcel...
-
複数のテキストファイルをexcel...
-
バッチファイルが作成できない
-
Excelでdatファイルを作成??
-
バッチによるショートカットの...
-
VB(6.0)で作成したDLLをVB(.Net...
-
ダウンロード不可PDFファイルは...
-
windowsへscp
-
圧縮ファイルから復元
-
OpenTextFile で書き込みできま...
-
複数のファイルを同時検索し、...
-
縮専を使用中に写真データが消えた
-
1フォルダに保存できるファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft Access エラー 3051
-
【Excel VBA】PDFを作成して,...
-
エクセルVBA フォームを開く時...
-
VBAでファイルパスが長すぎてコ...
-
ブラウザでASPファイルを開こう...
-
OCXのライセンス
-
Excel VBA シートを指定して...
-
FFFTPでサーバに新規フォルダが...
-
Refreshで落ちる
-
ASP.NETで、別サーバーへファイ...
-
【python】pandasでExcel(...
-
EXCELマクロで特定の行以下をコ...
-
共有ファイルにあるマクロの同...
-
フォルダ参照ではなくファイル...
-
web.configファイル内、valueに...
-
グーグルドライブからコピーし...
-
ExcelVBAで、隠しフォルダにあ...
-
VBAでFTPファイル転送がうまく...
-
BASP21のアップロードについて
-
Lubuntuでフォントをインストー...
おすすめ情報