【发布时间】:2015-01-01 17:09:57
【问题描述】:
我有一段代码可以读取大多数音频文件(包括 wav、mp3、midi...),但如果路径或文件名中有空格,它将无法工作。
所以我必须恢复到接受它的其他代码,但只读取 wav 文件...
这是读取所有类型音频的代码:
Option Explicit
Private Declare PtrSafe Function mciSendString Lib "winmm.dll" Alias _
"mciSendStringA" (ByVal lpstrCommand As String, ByVal _
lpstrReturnString As Any, ByVal uReturnLength As Long, ByVal _
hwndCallback As Long) As Long
Private sMusicFile As String
Dim Play
Public Sub Sound2(ByVal File$)
sMusicFile = File 'path has been included. Ex. "C:\3rdMan.mp3
Play = mciSendString("play " & sMusicFile, 0&, 0, 0)
If Play <> 0 Then 'this triggers if can't play the file
'Play = mciSendString("'play " & sMusicFile & "'", 0&, 0, 0) 'i tried this aproach, but doesn't seem to work
End If
End Sub
Public Sub StopSound(Optional ByVal FullFile$)
Play = mciSendString("close " & sMusicFile, 0&, 0, 0)
End Sub
非常感谢任何帮助,(我不想使用外部播放器弹出解决方法,也不想停止使用 VBA)
【问题讨论】:
-
“它不起作用”是什么意思?你有错误吗? (可能不是,因为您对
On Error Resume Next语句的使用不当)。找出引发的具体错误,它可能更容易为您提供帮助。这将需要至少暂时摆脱On Error Resume Next。 -
为什么要播放音频?我是讨厌这种功能的用户之一。
-
它不会引发错误,但如果 sMusicFile 中包含空格,它根本不会播放...
-
您是否遵循了@DavidZemens 的出色建议并摆脱了
On Error Resume Next?有了它,您将无法看到引发的任何错误。 -
您可能需要对空格进行转义或编码,或者将字符串放在引号中。但是如果没有看到当你摆脱错误语句时会发生什么,很难确定。