Excel VBA: Запуск звука с использованием API из WINDOWS

Автор Владимир, 06 января 2016, 15:03

Владимир

Работая под управлением 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" указал несуществующий файл, ошибки не было, музыки не было, но был стандартный короткий звуковой сигнал.