Невозможно воспроизвести MIDI-файл с помощью VBA Excel - PullRequest
0 голосов
/ 27 октября 2018

введите описание изображения здесь Я пытаюсь воспроизвести MIDI-файл с помощью редактора VBA.Но после назначения макроса .. Он показывает «Нажмите OK, когда MIDI-файл начнет воспроизводиться ...» .. Но песня не воспроизводится.И песня, и 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

1 Ответ

0 голосов
/ 27 октября 2018

Вам необходимо определить полный путь для промежуточного файла с его именем и расширением (".mid" или ".midi"):

PlayMidiFile "C:\Users\nulik\Desktop\music sairam\Indiana_Jones_And_The_Last_Crusade__Main_Theme.mid", True 

PlayMidiFile "C:\Users\nulik\Desktop\music sairam\Indiana_Jones_And_The_Last_Crusade__Main_Theme.mid", False 

РЕДАКТИРОВАТЬ: я получил его на работу, как в Excel 2010-32 бит и 2016-64 бит:

Добавьте PtrSafe в «Частную функцию объявления», если у вас 64-битная система. 32-битная система может иметь PtrSafe. Выполните «Sub TestPlayMidiFile» для воспроизведения миди-файла.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...