无法使用vba excel播放midi文件

无法使用vba excel播放midi文件,excel,vba,Excel,Vba,我正在尝试使用VBA编辑器播放midi文件。但是在分配宏之后。。 它显示“当MIDI文件开始播放时单击OK…”但歌曲没有播放。歌曲和excel都在同一个文件夹中。 那么,谁能告诉我错误在哪里吗?出了什么问题 Private Declare Function mciExecute Lib "winmm.dll" _ (ByVal lpstrCommand As String) As Long Sub PlayMidiFile(Indiana_Jo

我正在尝试使用VBA编辑器播放midi文件。但是在分配宏之后。。 它显示“当MIDI文件开始播放时单击OK…”但歌曲没有播放。歌曲和excel都在同一个文件夹中。 那么,谁能告诉我错误在哪里吗?出了什么问题

Private Declare Function mciExecute Lib "winmm.dll" _
                         (ByVal lpstrCommand As String) As Long

Sub PlayMidiFile(Indiana_Jones_And_The_Last_Crusade__Main_Theme As String, Play As Boolean)
    If Dir(Indiana_Jones_And_The_Last_Crusade__Main_Theme) = "" Then Exit Sub ' no file to play
    If Play Then
        mciExecute "play " & Indiana_Jones_And_The_Last_Crusade__Main_Theme ' start playing
    Else
        mciExecute "stop " & Indiana_Jones_And_The_Last_Crusade__Main_Theme ' stop playing
    End If
End Sub

Sub TestPlayMidiFile()
    PlayMidiFile "C:\Users\nulik\Desktop\music sairam", True
    MsgBox "Click OK when the MIDI file starts playing..."
    MsgBox "Click OK to stop playing the MIDI file..."
    PlayMidiFile "C:\Users\nulik\Desktop\music sairam", False
End Sub

您需要使用midi文件名和文件扩展名(“.mid”或“.midi”)定义midi文件的完整路径:


编辑:我让它在Excel 2010-32位和2016-64位上工作:

如果您有64位系统,请在“专用声明函数”中添加
PtrSafe
。32位系统可能具有
PtrSafe
。执行“
子测试播放midi文件”
”播放midi文件

Private Declare PtrSafe Function mciExecute Lib "winmm.dll" _
(ByVal lpstrCommand As String) As Long

Sub PlayMidiFile(MidiFileName As String, Play As Boolean)
    If Dir(MidiFileName) = "" Then Exit Sub ' no file to play
    If Play Then
        mciExecute "play " & MidiFileName ' start playing
    Else
        mciExecute "stop " & MidiFileName ' stop playing
    End If
End Sub

Sub TestPlayMidiFile()
    PlayMidiFile "G:\Till\robert_miles__fable__dream_remix__unknown.mid", True
    MsgBox "Click OK when the MIDI file starts playing..."
    MsgBox "Click OK to stop playing the MIDI file..."
    PlayMidiFile "G:\Till\robert_miles__fable__dream_remix__unknown.mid", False
End Sub

我有一个疑问..在MdiFileName的位置,我应该放置音乐文件名还是保持不变?还有..当我运行Modue时..它显示“指定的设备未打开或MCI未找到”。请提供帮助。@WizhiMdiFileName是变量的原始名称,只要到处都是一样的,那没关系。当我运行这个模型时,它显示“指定的设备没有打开或者MCI找不到”。请帮助。@WizhiAFAIK如果您使用版本>=Office 2010(条件编译器常量
VBA7
),那么
PtrSafe
关键字在32位VBA中也可用;在实际安装的64位版本中,您必须使用它。顺便说一句,LongPtr数据类型也是如此。因此,您可以也应该编写在这两种环境中运行的API代码。只有几个示例需要区分
Win64
Win32
安装。我不确定该语句的问题。对我来说,在我更改文件扩展名后,它就起作用了。也许这两个链接中的任何一个可以帮助您:或者当我运行它时..它只是显示“音乐开始播放时单击确定,音乐停止播放时单击ik”。但它实际上并没有播放歌曲。我也找不到任何错误。
Private Declare PtrSafe Function mciExecute Lib "winmm.dll" _
(ByVal lpstrCommand As String) As Long

Sub PlayMidiFile(MidiFileName As String, Play As Boolean)
    If Dir(MidiFileName) = "" Then Exit Sub ' no file to play
    If Play Then
        mciExecute "play " & MidiFileName ' start playing
    Else
        mciExecute "stop " & MidiFileName ' stop playing
    End If
End Sub

Sub TestPlayMidiFile()
    PlayMidiFile "G:\Till\robert_miles__fable__dream_remix__unknown.mid", True
    MsgBox "Click OK when the MIDI file starts playing..."
    MsgBox "Click OK to stop playing the MIDI file..."
    PlayMidiFile "G:\Till\robert_miles__fable__dream_remix__unknown.mid", False
End Sub