Генерация одиночного звукового сигнала в VBA с помощью оператора Beep. Оповещающий гудок при выборе определенных ячеек на рабочем листе Excel. Примеры.
Оператор Beep в VBA Excel
Оператор Beep предназначен для генерации одиночного звукового сигнала из кода VBA. Его частота и длительность зависят от аппаратного и системного программного обеспечения и различаются между отдельными компьютерами.
Источником звука может быть как системный динамик, непосредственно подключенный к материнской плате («Beeper», «Speaker»), так и внешняя акустическая система, подключенная к линейному выходу компьютера (возможно, так система предупреждает, что «Beeper» отсутствует).
Генерация одиночного сигнала
Пример 1
Вызвать одиночный сигнал из кода VBA Excel очень просто:
1 2 3 |
Sub Primer1() Beep End Sub |
Вставляйте ключевое слово Beep в то место кода, где должен прозвучать сигнал. Перед этим проверьте работоспособность оператора на вашем устройстве, скопировав в редактор VBA и запустив на выполнение код, представленный выше.
Звуковой сигнал при выборе ячейки
Если вы уже проверили работоспособность оператора Beep на вашем компьютере, попробуйте использовать воспроизведение сигнала при выборе определенных ячеек на рабочем листе Excel.
Пример 2
Следующий код размещается в модуле листа и генерирует звуковой сигнал при выборе ячейки "C3":
1 2 3 4 5 |
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, при выборе ячейки в котором будет подан звуковой сигнал:
1 2 3 4 5 |
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:
1 2 3 4 5 6 |
Sub Primer4() Dim i As Integer For i = 1 To 3 Beep Next i End Sub |
На моем компьютере при выполнении этого кода звучит только один сигнал. Возможно, три последовательных гудка способен издать только системный динамик («Beeper», «Speaker»), который у меня отсутствует. А сигнал через внешнюю акустическую систему, возможно, просто является предупреждением, что «Speaker» не подключен.
Пример 5
Заставить сигнал прозвучать трижды на моем компьютере удается только при пошаговом выполнении цикла из редактора VBA или вставки паузы с помощью информационного окна MsgBox:
1 2 3 4 5 6 7 |
Sub Primer5() Dim i As Integer For i = 1 To 3 MsgBox "Stop" Beep Next i End Sub |
Чтобы сгенерировать из кода VBA Excel звуковой сигнал заданной частоты и длительности и даже сыграть несложную мелодию, используйте функцию Beep из набора базовых функций Windows API.