vbaについて質問です。
MP3ファイルを鳴らしたいのですがうまくいきません。
---------------------------------------------------------
Sub Macro1()
Dim SoundFile As String
SoundFile = "C:\終了音.mp3"
If Dir(SoundFile) = "" Then
MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation
Exit Sub
End If
Shell "mplay32.exe /play /close " & SoundFile
End Sub
---------------------------------------------------------
を実行すると、
「Shell "mplay32.exe /play /close " & SoundFile」
の部分で
実行時エラー53
ファイルが見つかりません。
になります。
しかし、
If Dir(SoundFile) = "" Then
MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation
Exit Sub
End If
の部分では問題ないので、ファイルはある事になってると思うのですが、
なぜ「Shell "mplay32.exe /play /close " & SoundFile」の部分でエラーになるのでしょうか?
スペックは、エクセル2007、windows7です。
ご回答よろしくお願いします。
No.4ベストアンサー
- 回答日時:
まずは、当方の環境説明。
Windows7 64bit ,Office 2010 32bit
Wmplayer.exe について
検索すると二つ見つかりました。イミディエイトウィンドウでの確認だけですが
shell ("C:\Program Files\Windows Media Player\wmplayer.exe " & "C:\Windows\Media\tada.wav")
shell ("C:\Program Files (x86)\Windows Media Player\wmplayer.exe " & "C:\Windows\Media\tada.wav")
どちらでも、働きました。
/play /close オプションは有っても無駄なだけですので入れてません。
音楽ファイル名にスペースが含まれる場合は
shell ("C:\Program Files\Windows Media Player\wmplayer.exe " & """C:\Users\Public\Music\Sample Music\Sleep Away.mp3""")
のように。
APIを使用する場合。
標準でMP3ファイルが無いかなと探したら有りましてので・・。
以下をがばっと標準モジュールに貼り付けてみてください。
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Sub PlaySound()
Dim SoundFile As String, rc As Long
SoundFile = "C:\Users\Public\Music\Sample Music\Sleep Away.mp3" '多分有るかと?
If Dir(SoundFile) = "" Then
MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation
Exit Sub
End If
SoundFile = Chr(34) & SoundFile & Chr(34) 'スペース対策
rc = mciSendString("Open " & SoundFile, "", 0, 0)
rc = mciSendString("Play " & SoundFile, "", 0, 0)
'rc = mciSendString("Play " & SoundFile & " wait", "", 0, 0)
'↑演奏が終わるまで処理が返ってこないので没
'rc = mciSendString("Close " & SoundFile, "", 0, 0)
If rc <> 0 Then
MsgBox rc & " ?のエラーです"
End If
End Sub
Sub CloseSound()
Dim SoundFile As String, rc As Long
SoundFile = "C:\Users\Public\Music\Sample Music\Sleep Away.mp3"
' If Dir(SoundFile) = "" Then
' MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation
' Exit Sub
' End If
SoundFile = Chr(34) & SoundFile & Chr(34)
' rc = mciSendString("Open " & SoundFile, "", 0, 0)
' rc = mciSendString("Play " & SoundFile, "", 0, 0)
'rc = mciSendString("Play " & SoundFile & " wait", "", 0, 0)
'↑演奏が終わるまで処理が返ってこないので没
rc = mciSendString("Close " & SoundFile, "", 0, 0)
End Sub
これで、とりあえずは演奏・終了が出来ると思います。(要らないコメントは適当に)
どうやって音楽ファイルPathをモジュールに渡すか・・は
考えてみてください。
とっても参考になったところ(私自身、APIは門外漢です)VB6の話ですけど。
http://homepage1.nifty.com/rucio/main/technique/ …
>エラーになりませんが、音楽も演奏されません
は前回回答の田中氏の
「・・いきなりPlayしていたのが原因かも・・」だと思います。
蛇足。
Wmplayer.exe が自動的に消えてくれないなら、いっそのこと
WorksheetにActiveX コントロールの、『Windows Media Player』を張り付けて
WorkSheetのダブルクリックイベントなどに
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Me.WMP.URL = Target.Value
Cancel = True
End Sub
とか・・でも。Target に音楽ファイルのフルパスがあると仮定。
※WMPは当方で付けたオブジェクト名です。デフォルトだと、WindowsMediaPlayer1
になりました。
お返事が遅くなってしまい申し訳ございません。
PlaySoundでできました!私のためにいろいろ調べていただいてうれしいです^^
ありがとうございました。
No.3
- 回答日時:
鳴るはず。
パスが通っていないんじゃないか。
Shell "c:\program files\windows media player\wmplayer.exe /play /close " & SoundFile
とでもしてみたらどうでしょう。
「Shell "c:\program files\windows media player\wmplayer.exe /play /close " & SoundFile」
に変えてみたら、なんとか通りましたが、今度は、
「ファイルの再生中にWindowsMediaPlayerに問題が発生しました。」
と表示され、音楽が再生されません。
しかし、MP3ファイルをダブルクリックしすれば、問題なく再生できません。
せっかくお答えいただいたのにすいません。ありがとうございました。
No.2
- 回答日時:
Windows7 ではmplay32.exe は無くなりました。
wmplayer.exe しか残ってません。
wmplayer.exe では、/play /close のオプションは有りませんので
演奏が終了してもそのまま残ります。
WinXPの時は重宝してたんですけどねぇ。。
なので下記サイトをご参考に。
http://officetanaka.net/excel/vba/tips/tips22.htm
私もhttp://officetanaka.net/excel/vba/tips/tips22.htmを見て、Sample1のコードを参考にしました。
Shell "wmplayer.exe /play /close " & SoundFile
に変えてもダメなので、
URL先のSample2を試してみたのですが、
エラーになりませんが、音楽も演奏されません。
なぜでしょうか?
再度ご回答いただければ幸いです。
No.1
- 回答日時:
「の部分では問題ないので」
は、"C:\終了音.mp3"があるかどうかであって、"mplay32.exe "がなければ
「ファイルが見つかりません」になる。
"mplay32.exe "があるかどうかとパスが通っているのかどうかを確認したほうがいい。
XPにはあるが、7には"mplay32.exe "はなかったと思うが。
7は"wmplayer.exe"になっていないか。
音楽ファイルはあるけどmplay32.exe がないのですね。
ファイルを検索したら、wmplayer.exeはありましたが、
Shell "wmplayer.exe /play /close " & SoundFile
に変えてもエラーになってしまいました。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
beep音ではなく音楽(mp3ファイル)を鳴らしたい (VBA)
Access(アクセス)
-
エクセル ボタンクリックでmp3ファイルを再生
Excel(エクセル)
-
VBAで音楽を再生させた後
PowerPoint(パワーポイント)
-
-
4
VBAの進行を止めずに音声ファイルを再生する方法
Visual Basic(VBA)
-
5
VBAによる動画再生
Excel(エクセル)
-
6
VBAでシステム音を鳴らす方法
Visual Basic(VBA)
-
7
Shell関数で起動したメディアプレーヤーを終了したい。
Visual Basic(VBA)
-
8
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
9
ビープ音を連続して鳴らす
Visual Basic(VBA)
-
10
windows API 「mciSendString」 の連続再生について
Visual Basic(VBA)
-
11
マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。
Access(アクセス)
-
12
コマンドボタンがあるかどうかを取得するには?
PowerPoint(パワーポイント)
-
13
エクセル時間毎ごとにマクロを実行するやり方。
Excel(エクセル)
-
14
VBAのIF分で時間指定の条件式の書き方
Visual Basic(VBA)
-
15
VBAのユーザーフォームに動画を貼り付けて再生させたり停止させたりしたいのですが…
Visual Basic(VBA)
-
16
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
17
Word VBAでWindows media playerを動かす
Visual Basic(VBA)
-
18
エクセルで条件を満たした場合に音を鳴らしたいです。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時のエラー。動作環境の確保
-
シェルスクリプトで「HTMLのテ...
-
exeファイルをすぐに終了させな...
-
batファイルの作成方法について
-
VC++から引数付きexeファイルの...
-
exeファイルをホームページ上で...
-
JavaScriptでコマンドプ...
-
javaプログラムのexeファイルを...
-
NTFSFLPの使い方
-
コマンドプロンプトの不具合
-
JAVAのAPIのコールの仕方で質問...
-
初歩的質問かと思いますが…
-
サーブレットをapacheで公開す...
-
C言語での実行
-
VbscriptにてTeraterm マクロを...
-
OLE又はDDEを使うVISUAL BESIC...
-
Access クエリ実行が急に非常に...
-
jarファイルとjava.exeの関連付...
-
VBSでファイル存在の有無チェック
-
exeのショートカットをデスクト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access クエリ実行が急に非常に...
-
OLE又はDDEを使うVISUAL BESIC...
-
VC++から引数付きexeファイルの...
-
LINK : fatal error LNK1104に...
-
JavaScriptでコマンドプ...
-
サーブレットをapacheで公開す...
-
VBAでEXEファイルを動かす方法...
-
WScript.Echo と msgbox
-
64bit環境で32bitのodbc参照
-
eclipseで作ったプログラムを他...
-
c/c++ ビルドしたにもかかわら...
-
ミニゲーム作成。
-
コンポーネント`MSCOMM32.cox'...
-
xismoについてです!開こうとす...
-
パラメータが正しくありません...
-
コンパイル ./aと./a.out の違い
-
コマンドプロンプトで外のexeや...
-
batからexeを実行し戻り値を受...
-
VBAでMP3を鳴らしたい
-
VB6.0で作ったプロジェクトが起...
おすすめ情報