Работая под управлением WINDOWS XP в Excel 2003, могу запускать звук с использованием API из WINDOWS.
При переходе на Excel 2013 такой прием не срабатывает.
Прошу помочь советом и фрагментом кода для запуска .wav-файлов.
Не срабатывает процедура:
Код
Const SND_SYNC = 0 ' play synchronously (default)
Const SND_ASYNC = 1 ' play asynchronously
Const SND_NODEFAULT = 2 ' don't use default sound
Const SND_MEMORY = 4 ' lpszSoundName points to a memory file
Const SND_LOOP = 8 ' loop the sound until next sndPlaySound
Const SND_NOSTOP = 16 ' don't stop any currently playing sound
Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Public Sub StartSound(name As String)
Dim Res As Long
Res = sndPlaySound(name, SND_ASYNC)
End Sub
Есть подозрение, что неверно подключается подпрограмма из ОC WINDOWS по декларации:
Public Declare Function sndPlaySound Lib "winmm.dll" _
Alias "sndPlaySoundA" (ByVal lpszSoundName As String, _
ByVal uFlags As Long) As Long
Макросы запускаются, переключения между листами и задержки по командам от макросов происходят, а вот звук по командам от макросов не запускается. Отдельно файлы звука по двойному щелчку (по командам от WINDOWS) запускаются и звучат нормально.
А если вот так попробовать запускать процедуру "StartSound", а не из макроса, то есть звук? В переменную "name" запишите нужные данные.
Sub Main()
Dim name As String
name = "здесь укажите нужный параметр"
Call StartSound(name)
End Sub
Public Sub StartSound(name As String)
Dim Res As Long
Res = sndPlaySound(name, SND_ASYNC)
End Sub
Спасибо! В моем домашнем компьютере с WINDOWS XP и Office 2003 все получилось. Послезавтра попробую на работе с более поздними версиями ПО.
А что вы указываете в "name"? Чтобы я мог у себя это протестировать. Вы запускаете какую-то стандартную музыку (которая есть на каждом компьютере) или специфическую?
В заработавшем макросе использован фрагмент кода:
Dim name As String
' ''name = "здесь укажите нужный параметр"
name = ActiveWorkbook.Path + "\Звуки\" + "fanfare.wav"
Call StartSound(name)
В папке "Звуки" лежит файл с именем "fanfare.wav". Его пришлось для пересылки заархивировать, т.к. расширение .wav Ваша система не пропускает.
Я протестировал - у меня работает (звук есть). Я тестировал на Windows 7 и "Excel 2013".
Если во время работы макроса ошибка не возникает и в то же самое время звука нет, то могу предположить, что в "name" указано неправильно полное имя (путь + имя) звукового файла. Я сейчас в "name" указал несуществующий файл, ошибки не было, музыки не было, но был стандартный короткий звуковой сигнал.