Перейти к содержимому

VBA Excel. Оператор Beep (одиночный звуковой сигнал)

Генерация одиночного звукового сигнала в VBA с помощью оператора Beep. Оповещающий гудок при выборе определенных ячеек на рабочем листе Excel. Примеры.

  1. Оператор Beep в VBA Excel
  2. Звуковой сигнал при выборе ячейки
  3. Несколько сигналов подряд

Оператор Beep в VBA 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.

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора. Комментарии, поступившие с 20.11.18 по 25.11.18, пройдут модерацию 26-27.11.18