dポイントプレゼントキャンペーン実施中!

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です。
ご回答よろしくお願いします。

A 回答 (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
になりました。
    • good
    • 1
この回答へのお礼

お返事が遅くなってしまい申し訳ございません。

PlaySoundでできました!私のためにいろいろ調べていただいてうれしいです^^
ありがとうございました。

お礼日時:2012/04/14 11:40

鳴るはず。


パスが通っていないんじゃないか。
Shell "c:\program files\windows media player\wmplayer.exe /play /close " & SoundFile
とでもしてみたらどうでしょう。
    • good
    • 0
この回答へのお礼

「Shell "c:\program files\windows media player\wmplayer.exe /play /close " & SoundFile」
に変えてみたら、なんとか通りましたが、今度は、
「ファイルの再生中にWindowsMediaPlayerに問題が発生しました。」
と表示され、音楽が再生されません。
しかし、MP3ファイルをダブルクリックしすれば、問題なく再生できません。

せっかくお答えいただいたのにすいません。ありがとうございました。

お礼日時:2012/04/07 21:32

Windows7 ではmplay32.exe は無くなりました。


wmplayer.exe しか残ってません。
wmplayer.exe では、/play /close のオプションは有りませんので
演奏が終了してもそのまま残ります。

WinXPの時は重宝してたんですけどねぇ。。
なので下記サイトをご参考に。
http://officetanaka.net/excel/vba/tips/tips22.htm
    • good
    • 0
この回答へのお礼

私もhttp://officetanaka.net/excel/vba/tips/tips22.htmを見て、Sample1のコードを参考にしました。

Shell "wmplayer.exe /play /close " & SoundFile
に変えてもダメなので、
URL先のSample2を試してみたのですが、
エラーになりませんが、音楽も演奏されません。
なぜでしょうか?
再度ご回答いただければ幸いです。

お礼日時:2012/04/04 23:06

「の部分では問題ないので」


は、"C:\終了音.mp3"があるかどうかであって、"mplay32.exe "がなければ
「ファイルが見つかりません」になる。
"mplay32.exe "があるかどうかとパスが通っているのかどうかを確認したほうがいい。
XPにはあるが、7には"mplay32.exe "はなかったと思うが。
7は"wmplayer.exe"になっていないか。
    • good
    • 0
この回答へのお礼

音楽ファイルはあるけどmplay32.exe がないのですね。

ファイルを検索したら、wmplayer.exeはありましたが、

Shell "wmplayer.exe /play /close " & SoundFile
に変えてもエラーになってしまいました。。。

お礼日時:2012/04/04 23:03

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A