Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Можно ли присвоить звук макросу?

248
23 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
Можно ли присваивать в макросах Ворда или Екселя звуки событиям? :eek: Можно ли заставить звучать динамик компа (т.е. чтобы были "пики", а лучше мелодия, наподобие старых одноголосых рингтонов). Т.е. возможна ли одноголосая (через динамик) или многоголосая (через звук. карту) "индикация" работы макроса?
1.9K
23 декабря 2006 года
AxXxB
229 / / 21.11.2006
Есть объект Windows Media Player. Комментарии излишни.:)
248
23 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
Цитата: AxXxB
Есть объект Windows Media Player. Комментарии излишни.:)



Т.е. загружать WMP? Ну не серьезно. Мой макрос ведь не для услаждения слуха работает, а просто должен проинформировать, что "то-то и то-то". А пропищать никак нельзя? Лет 300 назад в Турбобейсике была команда beep. И к ней можно было подписать (не помню как) параметры на длительность и частоту нот. Вот это была жизнь. А потом появились Биллы Гейтсы, "окна", WMP и мир стал блеклым... :D

1.9K
23 декабря 2006 года
AxXxB
229 / / 21.11.2006
И в VBA тоже есть Beep, только там нельзя ничего приписывать - просто пишешь Beep и все. Попробуй. :D
263
24 декабря 2006 года
koltaviy
816 / / 16.12.2004
Цитата: AxXxB
ЗЫ. Скажи, как сделать, чтобы мой макрос запускался на чужом компьютере и не ругался, мол, небезопасно?


Тема уже неоднократно обсуждалась на форуме в этом разделе!! Способов несколько.. В поиск!!
А вообще хочешь чо-то спросить - пользуйся поиском.. Поиском не нашел - создавай тему.. а не справшивай в теме абсолютно не имеющей отношения к твоему вопросу!!

263
24 декабря 2006 года
koltaviy
816 / / 16.12.2004
Цитата: Dmitry2064
Можно ли присваивать в макросах Ворда или Екселя звуки событиям? :eek: Можно ли заставить звучать динамик компа (т.е. чтобы были "пики", а лучше мелодия, наподобие старых одноголосых рингтонов). Т.е. возможна ли одноголосая (через динамик) или многоголосая (через звук. карту) "индикация" работы макроса?


Ищи в стророну WinAPI..

248
25 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
До ВинАпи пока не дошел, но вот списал из хелпа такой код:
[COLOR="Navy"]Sub beep()
Dim I
For I = 1 To 3 ' Loop 3 times.
beep ' Sound a tone.
Next I
End Sub[/COLOR]


Так оно мне в ответ пишет (на строке [COLOR="Navy"]beep[/COLOR]): [COLOR="Green"]Run Time err: 28. Out of stack space[/COLOR] ...:(
Т.е. оно уже не зазвучит? (или может дело в том, что на ноутбуке нет встроенного динамика?)
1.9K
25 декабря 2006 года
AxXxB
229 / / 21.11.2006
[QUOTE=Dmitry2064]Так оно мне в ответ пишет (на строке beep): Run Time err: 28. Out of stack space ...
Т.е. оно уже не зазвучит? (или может дело в том, что на ноутбуке нет встроенного динамика?)[/QUOTE]

Вообще-то в ВБ функция beep проигрывает не звук из внутреннего динамика, а "Стандартный звук" в Винде (если у тебя не она, то тогда не знаю, но точно не из вн. динамика). А то что "Превышен размер стека" - это скорее всего из-за того, что звук слишком длинный, и, не успевая проиграться один раз, вызывается повторно. Поэтому попробуй просто написать beep и послушай, что получится. У меня аудиодрайвера нет, подсказать не могу, но вн. динамик есть, поэтому с полной уверенностью заявляю, что из него ничего не должно идти. Попробую где-нибудь найти.

Во!!! Нашел!!!
Чтобы проиграть как обычный звук, используется функция АПИ MessageBeep. Можно проиграть пять звуков.

Код:
Private Declare Function MessageBeep Lib "user32" _
        (ByVal wType As Long) As Long

      Private Const MB_NASTERISK = &H40&
      Private Const MB_XCLMTION = &H30&
      Private Const MB_HAND = &H10&
      Private Const MB_QUESTION = &H20&
      Private Const MB_MASK = &HF0&

      Private Sub сommand1_click()
              Call MessageBeep(MB_NASTERISK)
      End Sub

      Private Sub command2_click()
              Call MessageBeep(MB_XCLMTION)
      End Sub


И т. д. Сам не испытал (по причине, описанной выше), но ошибок нет.

Чтобы проиграть звук из внутр. динамика, используется ВинАПИ Beep.

 
Код:
Private Declare Function Beep& Lib "kernel32" _
        (ByVal dwFreq As Long, ByVal dwDuration As Long)

      Private Sub Command1_Click()
              Call Beep(val(Text1), val(text2))
      End Sub


В ней dwFreq - частота, dwDuration - длина. Испытал - работает!

ЗЫ. Все-таки жив еще любимый Яндех :D :D :D
248
27 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
Но похоже, что указанные коды надо писать в окне vb, а не VBA. У меня в ВБА по клаве F8 ничего не происходит, а по F5 (запустить макрос) выскакивает окошко Macros - Macro name. Как будто я нажал Alt-F8. Эти инструкции не для VBA?

P.S. А beep действительно выдал звук Виндов по умолчанию. Правда не смог повторить его 3 раза, как предписано инструкцией. Какой цикл не пиши, бипает один раз. (Да и то хорошо - чувствуешь себя мультимедийным программером из "Силиконовой долинки" ):cool:
1.9K
27 декабря 2006 года
AxXxB
229 / / 21.11.2006
[QUOTE=Dmitry2064]Но похоже, что указанные коды надо писать в окне vb, а не VBA[/QUOTE]
Эти функции действуют и там, и там. Вот тебе примерчик на ВБА (см. вложение). Не бойся включить макросы - макровирусов там нет.

ЗЫ. Оценка - 5 баллов
248
27 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
Спасибо за вложение. Будем разбирать...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог