Генерация одиночного звукового сигнала в VBA с помощью оператора Beep. Оповещающий гудок при выборе определенных ячеек на рабочем листе Excel. Примеры.
Оператор Beep предназначен для генерации одиночного звукового сигнала из кода VBA. Его частота и длительность зависят от аппаратного и системного программного обеспечения и различаются между отдельными компьютерами.
Источником звука может быть как системный динамик, непосредственно подключенный к материнской плате («Beeper», «Speaker»), так и внешняя акустическая система, подключенная к линейному выходу компьютера (возможно, так система предупреждает, что «Beeper» отсутствует).
Генерация одиночного сигнала
Пример 1
Вызвать одиночный сигнал из кода VBA Excel очень просто:
Sub Primer1() Beep End Sub |
Вставляйте ключевое слово Beep в то место кода, где должен прозвучать сигнал. Перед этим проверьте работоспособность оператора на вашем устройстве, скопировав в редактор VBA и запустив на выполнение код, представленный выше.
Звуковой сигнал при выборе ячейки
Если вы уже проверили работоспособность оператора Beep на вашем компьютере, попробуйте использовать воспроизведение сигнала при выборе определенных ячеек на рабочем листе Excel.
Пример 2
Следующий код размещается в модуле листа и генерирует звуковой сигнал при выборе ячейки «C3»:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = «$C$3» Then Beep End If End Sub |
Target — это переменная диапазона (As Range), которой присваивается выбранная на рабочем листе ячейка. И если будет выбрана ячейка с адресом «C3», прозвучит гудок.
Пример 3
А так можно задать произвольный диапазон на рабочем листе Excel, при выборе ячейки в котором будет подан звуковой сигнал:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Range(«B2:D4,E6,F1:I8»)) Is Nothing Then Beep End If End Sub |
Выбрав любую ячейку из диапазона «B2:D4,E6,F1:I8», вы услышите гудок. Конструкция Not Intersect(Target, Range("B2:D4,E6,F1:I8")) Is Nothing
используется для определения, когда переменная Target пересекается с заданным диапазоном. Здесь используется двойное отрицание, которое дает в итоге плюс: «не не пересекается» = «пересекается».
Если в приведенной выше конструкции двойного отрицания убрать оператор Not, звуковой сигнал будет генерироваться при выборе любой ячейки, не входящей в указанный диапазон («B2:D4,E6,F1:I8»).
Несколько сигналов подряд
Возможность генерации из кода VBA Excel нескольких сигналов подряд с помощью оператора Beep очевидно зависит также как частота и длительность сигнала от аппаратного и системного программного обеспечения конкретного компьютера.
Пример 4
В этом примере кода с сайта docs.microsoft.com должны звучать три последовательных гудка Beep:
Sub Primer4() Dim i As Integer For i = 1 To 3 Beep Next i End Sub |
На моем компьютере при выполнении этого кода звучит только один сигнал. Возможно, три последовательных гудка способен издать только системный динамик («Beeper», «Speaker»), который у меня отсутствует. А сигнал через внешнюю акустическую систему, возможно, просто является предупреждением, что «Speaker» не подключен.
Пример 5
Заставить сигнал прозвучать трижды на моем компьютере удается только при пошаговом выполнении цикла из редактора VBA или вставки паузы с помощью информационного окна MsgBox:
Sub Primer5() Dim i As Integer For i = 1 To 3 MsgBox «Stop» Beep Next i End Sub |
Чтобы сгенерировать из кода VBA Excel звуковой сигнал заданной частоты и длительности и даже сыграть несложную мелодию, используйте функцию Beep из набора базовых функций Windows API.
В Excel мы можем применить условное форматирование для форматирования и выделения ячеек для соответствия условию по мере необходимости, но иногда вы можете захотеть воспроизвести звук, если условие выполнено. Например, если значение ячейки в A1 больше 300, я хочу, чтобы воспроизводился звук. Excel не поддерживает эту функцию, в этой статье я представлю некоторые коды VBA для решения этой задачи.
Воспроизвести звуковой сигнал системы по умолчанию на основе значения ячейки с кодом VBA
Воспроизвести собственный звук на основе значения ячейки с кодом VBA
Воспроизвести звук, если значение ячейки изменяется в определенном столбце с кодом VBA
Воспроизвести звуковой сигнал системы по умолчанию на основе значения ячейки с кодом VBA
Вот удобный код для воспроизведения звукового сигнала системы по умолчанию при выполнении определенного условия, сделайте следующее:
1. Удерживая нажатой ALT + F11 ключи, затем он открывает Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.
Код VBA: воспроизведение звукового сигнала системы по умолчанию на основе значения ячейки:
Function BeepMe() As String
Beep
BeepMe = ""
End Function
3. Затем сохраните и закройте это окно кода, вернитесь на рабочий лист и введите эту формулу: = ЕСЛИ (A1> 300, BeepMe (), «») в пустую ячейку рядом с ячейкой, содержащей значение, на основе которого вы хотите воспроизвести звук, а затем нажмите Enter key, в ячейке формулы ничего не будет отображаться, см. снимок экрана:
4. И теперь, если введенное значение в ячейке A1 больше 300, будет воспроизводиться системный звуковой сигнал по умолчанию.
Воспроизвести собственный звук на основе значения ячейки с кодом VBA
Если вы хотите воспроизвести какой-либо другой звук, кроме звукового сигнала системы по умолчанию, здесь также код VBA может оказать вам услугу.
1. Удерживайте ALT + F11 ключи, затем он открывает Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.
Код VBA: воспроизведение определенного звука на основе значения ячейки:
#If Win64 Then
Private Declare PtrSafe Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As String, _
ByVal hModule As LongPtr, ByVal dwFlags As Long) As Boolean
#Else
Private Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As String, _
ByVal hModule As Long, ByVal dwFlags As Long) As Boolean
#End If
Const SND_SYNC = &H0
Const SND_ASYNC = &H1
Const SND_FILENAME = &H20000
Function SoundMe() As String
'Updateby Extendoffice 20161223
Call PlaySound("c:windowsmediaSpeech On.wav", _
0, SND_ASYNC Or SND_FILENAME)
SoundMe = ""
End Function
3. Затем сохраните и закройте это окно кода, вернитесь на рабочий лист и введите эту формулу: = ЕСЛИ (A1> 300, SoundMe (), «»)в пустую ячейку рядом с ячейкой, содержащей значение, на основе которого вы хотите воспроизвести звук, а затем нажмите Enter key, в ячейке формулы ничего не будет отображаться, см. снимок экрана:
4. С этого момента, если в ячейку A300 ввести значение больше 1, сразу будет воспроизводиться определенный звук.
Заметки: В приведенном выше коде вы можете изменить звуковой файл WAV по своему усмотрению из c: windows media Путь файла. Смотрите скриншот:
Воспроизвести звук, если значение ячейки изменяется в определенном столбце с кодом VBA
Если вы хотите воспроизвести звук при изменении значения ячейки в определенном столбце, вы можете применить следующий код VBA.
1. Щелкните правой кнопкой мыши вкладку листа, на которой вы хотите воспроизводить звук при изменении значения в столбце, затем выберите Просмотреть код из контекстного меню, а в открывшемся Microsoft Visual Basic для приложений окна, скопируйте и вставьте следующий код в пустой модуль:
Код VBA: воспроизведение звука при изменении значения ячейки в столбце:
Private Sub Worksheet_Change(ByVal Target As Range)
'Updateby Extendoffice 20161223
Dim xCell As Range
On Error Resume Next
If Target.Columns.Count = 1 Then
If Intersect(Target, Columns(3)) Is Nothing Then
Exit Sub
Else
For Each xCell In Columns(3)
On Error Resume Next
If (xCell.Value = Target.Value) And (xCell.Value <> "") Then
Beep
Exit For
End If
Next
End If
End If
End Sub
Внимание: В приведенном выше коде число 3 в сценарии Колонны (3) — номер столбца, в котором вы хотите воспроизводить звук при изменении значения в этом столбце.
2. А затем сохраните и закройте это окно кода, теперь, если значение ячейки изменится в третьем столбце, будет воспроизводиться системный звуковой сигнал по умолчанию.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Самый простой вариант извлечь звук при помощи макроса VBA:
Shell "Cmd.exe /c echo " & Chr(7), vbHide
Эта команда вводит в консоль символ с кодом 7 (ввод этого символа вызывает звуковой сигнал)
Из спикера компьютера (не из динамиков!) прозвучит короткий однотональный звуковой сигнал.
Если же нужен звук подлиннее — то можно «ввести» в консоль несколько символов Chr(7).
Например, эта строка кода выдаст тройной звуковой сигнал:
Shell "Cmd.exe /c echo " & Chr(7) & Chr(7) & Chr(7), vbHide
Ниже приведён более сложный вариант — с использованием WinAPI (функции Beep).
Вставьте этот код в стандартный модуль:
Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long Sub beeps(melody As String, Optional ByVal BeepTime As Integer = 200) mr = "qazwsxedcrfvtgbyhnujmik,ol.p;/['" For i = 1 To Len(melody) DoEvents: nextlen = 1: letter = Mid$(melody, i, 1) nota = InStr(1, mr, letter) If IsNumeric(letter) And letter > 0 Then nextlen = letter: i = i + 1: nota = InStr(1, mr, Mid$(melody, i, 1)) End If If nota > 0 Then tone = 220 * (2 ^ ((nota - 1) / 12)) a = Beep(tone, nextlen * BeepTime) Else a = Beep(30000, nextlen * BeepTime / 5) End If Next End Sub
Ниже создайте дополнительные функции (с заранее заданными наборами звуков):
' воспроизведение звуков высокой и низкой частоты Sub beepH(): beeps "k", 100: End Sub Sub beepH0(): beeps "k", 30: End Sub Sub BeepH2(): beeps "k,k", 100: End Sub Sub beepL(): Beep 100, 100: End Sub Sub beepL0(): Beep 100, 30: End Sub Sub BeepL2() Beep 100, 100 Beep 104, 100 Beep 100, 100 Beep 70, 200 End Sub
Можно воспроизводить целые мелодии:
' примеры использования - воспроизведение простейших мелодий Sub Play_Molody_1() speed = 150 beeps "5 5 3jnybt tybtftdx2d", speed beeps "5 5 3jnybt tybtftdx2d", speed beeps "5 5 nnnyc3 ct2j nyc2 ty2btff ftf2t", speed beeps "5 5 nnnyc3 ct2j nyc2 ty2btff ftf3 yb2t", speed End Sub Sub Play_Molody_2() speed = 250 beeps "jny3b3t5 5 jny3y3b 5 5 bynk2m5 bynk2m j2b2 n3y", speed beeps "5 5 5 jny3b3t5 5 jny3y3b 5 5 bynk2m5 bynk2m j2b2 y3t", speed beeps "5 5 5 ff3y5 yy2yyy2yby2b4t", speed beeps "5 5 5 ff2y5 tby tby nj3m", speed End Sub
Как создавать такие мелодии?
Если вы никогда не изучали нотную грамоту — то будет сложновато.
Если повнимательнее сравнить клавиатуру компьютера и клавиатуру баяна — то можно углядеть похожее расположение клавиш.
За воспроизведение нот отвечают буквы, за паузы — пробелы.
Если перед нотой (буквой) или перед паузой (пробел) поставить цифру, длительность этой ноты (паузы) увеличивается в соответствующее количество раз)
Можете ещё побаловаться этой программкой: http://excelvba.ru/fortepiano
Leanna Пользователь Сообщений: 816 |
Подскажите пожалуйста: Excel VBA это умеет делать? Есть код? Работать надо не 12 часов, а головой. |
slav Пользователь Сообщений: 232 |
{quote}{login=Leanna}{date=01.12.2009 10:38}{thema=Звук системника. Excel VBA}{post}Подскажите пожалуйста: Excel VBA это умеет делать? Есть код?{/post}{/quote} |
beep работает далеко не во всех компах, видимо надо что-то в биосе включать |
|
Dophin Пользователь Сообщений: 2684 |
я например во всех своих системниках бипер выдираю |
Dophin Пользователь Сообщений: 2684 |
если вы именно про звук биоса когда оперативка погорела или еще что) |
slav Пользователь Сообщений: 232 |
в глобальных переменных объявлеям а там где нужно поиграть музычку пишем так |
Посмотрите пример файла с проигрыванием звука через динамик PC: http://excelvba.ru/XL_Files/Sample__01-12-2009__13-34-22.zip пример взят из этой темы: http://www.programmersforum.ru/showthread.php?p=223005 Там же есть пояснения, почему звук воспроизводится не на всех системах. Обратите внимание, что код в моём примере может проигрывать через PC-spaeker целые мелодии: Sub melody1(): speed = 150 |
|
VovaK Пользователь Сообщений: 1716 |
Nothing … Netbook MSI U100 |
я Гость |
#10 12.10.2011 18:50:26 да это проще простого |
Как издать звуковой сигнал простейшим способом |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |