エクセル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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- iPhone(アイフォーン) iPhone14ですが、マナーモード(消音モード)なのに電話の着信音が鳴ります。 原因として、「着信 1 2023/08/25 22:59
- Visual Basic(VBA) FileSearch2007に変わる構文について 1 2022/12/16 16:57
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft Access エラー 3051
-
【Excel VBA】PDFを作成して,...
-
Lubuntuでフォントをインストー...
-
OCXのライセンス
-
VBAでファイルパスが長すぎてコ...
-
エクセルVBA フォームを開く時...
-
FFFTPでサーバに新規フォルダが...
-
Refreshで落ちる
-
BASP21のアップロードについて
-
dreamweaver ファイル保存時に...
-
Excel VBA シートを指定して...
-
VBAでFTPファイル転送がうまく...
-
ASP上でFileSystemObjectのDele...
-
VBSで指定したフォルダにファイ...
-
ブラウザでASPファイルを開こう...
-
バッチによるショートカットの...
-
Excelでdatファイルを作成??
-
フォルダ作成用バッチファイル...
-
batファイル処理でのテキストフ...
-
バッチファイルが作成できない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでファイルパスが長すぎてコ...
-
【Excel VBA】PDFを作成して,...
-
Microsoft Access エラー 3051
-
Lubuntuでフォントをインストー...
-
Excel VBA シートを指定して...
-
Refreshで落ちる
-
フォルダ参照ではなくファイル...
-
FFFTPでサーバに新規フォルダが...
-
VBAでFTPファイル転送がうまく...
-
エクセルVBA フォームを開く時...
-
ExcelVBAで、隠しフォルダにあ...
-
グーグルドライブからコピーし...
-
web.configファイル内、valueに...
-
OCXのライセンス
-
ブラウザでASPファイルを開こう...
-
ASP上でFileSystemObjectのDele...
-
ADODB.Recordsetを使用してExce...
-
VBSで指定したフォルダにファイ...
-
BASP21のアップロードについて
-
【python】pandasでExcel(...
おすすめ情報