Звуковые сигналы в excel

Генерация одиночного звукового сигнала в 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, в ячейке формулы ничего не будет отображаться, см. снимок экрана:

doc воспроизвести звук, если условие истинно 1

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, в ячейке формулы ничего не будет отображаться, см. снимок экрана:

doc воспроизвести звук, если условие истинно 2

4. С этого момента, если в ячейку A300 ввести значение больше 1, сразу будет воспроизводиться определенный звук.

Заметки: В приведенном выше коде вы можете изменить звуковой файл WAV по своему усмотрению из c: windows media Путь файла. Смотрите скриншот:

doc воспроизвести звук, если условие истинно 3


стрелка синий правый пузырь Воспроизвести звук, если значение ячейки изменяется в определенном столбце с кодом 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

doc воспроизвести звук, если условие истинно 4

Внимание: В приведенном выше коде число 3 в сценарии Колонны (3) — номер столбца, в котором вы хотите воспроизводить звук при изменении значения в этом столбце.

2. А затем сохраните и закройте это окно кода, теперь, если значение ячейки изменится в третьем столбце, будет воспроизводиться системный звуковой сигнал по умолчанию.


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

 

wasya

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

Воспроизведение звука работает. Но обнаружилась другая проблема.  

  Мы ведь сравниваем значение в колонке А с ячейкой F1? У меня сейчас звук играет каждый раз когда в ячейку в колонке А заносится новое значение. Т.е. если там стоит 2, а я проставляю 1 — есть звук. Если там стоит 2, а я вношу 3 — есть звук. Если стоит 2, а я вношу 2 — нет звука.  
А мне нужно, что бы звук был только тогда когда вношу 1, т.е. текущее значение F1. Т.е. стоит 2, вношу 1 — звук. Стоит 2, вношу 3 — тишина, Стоит 2, вношу 2 — тишина.    

  P.s.: не исключаю что мы с самого начала не поняли друг друга, прошу извинить. Но вроде бы я так и расписывал…

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

Видимо не поняли… Давайте определимся. Из Вашего сообщения я сделал вывод, что если хоть в одной строке столбца А есть значение, равное F1, то нужно воспроизвести звуковой файл. Или не так?  
P.S. Я там ещё с формулами перемудрил — можно будет одной обойтись.

 

wasya

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

Ок. Разложу весь текущий процесс работы с этим файлом.  

  Есть ноут, блютуз сканер, таблица с определенными значениями. Человек стоит далеко от ноута, сканирует коробку с штрихкодом, пикнув по этому самому штрихкоду. Далее в таблице ищется строка с инфой из данного штрихкода. По нахождению, автоматически производятся определенные вычисления/сравнения, в итоге в строке с этим кодом, в последней колонке рисуется значение, либо 1 либо 2. Нам нужно, чтобы при появлении в заданной ячейке 1 — был звук, если что-то иное (в данном случае 2) — игнор, тишина. Т.е. в целом обработка идет как бы построчно. Пикнул один штрих — звук/тишина, пикает другой штрих — звук/тишина, в зависимости от того какое значение появляется в ячейке, которую мы сравниваем с эталонной, в нашем случае можно даже мертво прописать «1».  

  Ну надеюсь достаточно подробно объяснил процесс, и то, что мне нужно от этого процесса :)  

  Юрий, на самом деле огроменное Вам спасибо за участие!!!

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

Вроде понял. Посмотрите вариант. При появлении в какой-либо ячейке столбца А единички макрос сработает. При этом выделится эта ячейка и покрасится в красный. Так подойдёт?  
P.S. На листе адрес не мой, а автора исходного файла :-)

 

wasya

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

Юрий, все работает. Именно так, как и хотелось! Просто отлично!!!!!!!  

  Завтра на работе попытаюсь все это внедрить в исходный файл. О результатах обязательно отпишусь!  

  Огромное Вам спасибо!!!

 

wasya

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

Юрий, обнаружилась интересная особенность. При открытии файла с последним вариантом и попытке выполнить условие — красным строка отмечается, но выходит ошибка «Cannot find the specified file….». Файл со звуком в этой же папке. Дальше — интересней. Открываю тот пример для проверки возможности воспроизведения звука (mci.xls) — звук играет (все файлы в одной папке). Тут же открываю Ваш пример — все работает корректно. Закрываю mci.xls — все работает. Закрываю все открытые окна экселя и открываю заново Ваш пример — звука нет (не может найти файл).  

  В чем может быть причина и как от этого избавиться?

 

wasya

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

И еще проблема. Ставлю «1» — играет звук, выделяется красным (все как и должно быть). В следующей ячейке (тут неважно, следующая по счету или пятью строками ниже) ставлю например «2» — выделение фокусируется на первой ячейке (где условие было выполнено) + играет звук. В этих случаях всегда выделяется последняя ячейка, где условие было выполнено. Если в ячейке проставляется такое же значение, как и было уже — ничего не происходит.  

  Хммм..    
Все это корректно в случае если у нас весь столбец заполнен изначально значением «2», тогда при появлении в какой-либо строке «1» — все ок. Но у нас изначально эта колонка пустая, заполняется по мере сканирования либо «1» либо «2». И тогда при заполнении пустой ячейки значением «2» — выделяется последняя ячейка с выполненным условием «1», идет звук.  

  Можно внести такую особенность, что изначально колонка пустая, при появлении «1» — звук, при появлении «2» или чего-то другого — тишина?  

  Я, наверное, уже достал? ;)

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

По первому вопросу — попробовал исправить. Проверьте.  
По второму. Вы пишите: «Если в ячейке проставляется такое же значение, как и было уже — ничего не происходит.» А как иначе? Если Вы в ячейку, где уже была единичка вновь заносите единицу, то ведь ничего и не меняется. По поводу изначально пустой таблицы. Она ведь только в первый момент будет пустая. После первого же сканирования хоть одна ячейка заполнится или 2 или 1. Давайте уточнимся с алгоритмом. Может каждый раз очищать таблицу?

 

wasya

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

По примеру. При соблюдении условия выскакивает ошибка «Run-time error ’76’ Path not found». Ошибка на строке ChDir ThisWorkbook.Path.  

  Юрий, ранее я возможно немного запутал. Прошу извинить. Во вложенном файле — пример таблицы которая заполняется. Изначально она вся заполнена. Кроме колонки В. В эту колонку попадают данные со сканера. Далее производятся определенные вычисления в колонках C,D,E,F,G и H. И в колонке I вместо #N/A появляется либо «Х», либо что либо другое. «Х» — это выполнение условия для звука. Мы с вами брали это за «1». Это не суть важно мы можем заменить X на 1.  
Со следующим сканированием данные попадают в следующую строку в колонке В и так далее.  

  Теперь я на 100% достоверно описал наш процесс и суть поставленной задачи. Надеюсь эта задача все еще выполнима…

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

Давайте не будем перескакивать с файла на файл. Рассмотрим на моём примере. У меня никакой ошибки не происходит. При появлении в любой строке единички срабатывает макрос. Что не так?

 

wasya

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

Извиняюсь, поторопился…  

  Юрий, да Ваш файл работает. Звук воспроизводится нормально. Причина была в том, что я не скопировал пример в папку со звуком.  

  А как быть в ситуации когда изначально таблица заполнена? Когда в нужном дипазоне стоит #N/A? Есть какой-нибудь вариант?

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

Убегаю. Появлюсь вечером.

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

Давайте ещё разок уточнимся. Есть таблица с данными (пусть это пока будут только двойки). Вы работаете сканером. Услышали звуковой сигнал. Но ведь сам сигнал не ради сигнала. Вы ведь должны что-то предпринять, подойдя к ноуту. ЧТО? Увидели ячейку с красной заливкой – Ваши действия? Может есть смысл в соседнем столбце ставить какую-либо пометку, что данная строка «обработана»?

 

wasya

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

Суть звукового сигнала — дать человеку знать (не подходя к ноуту), что условие выполнено, значит с этим конкретным сканируемым в данный момент предметом нужно осуществить конкретные действия и продолжить сканирование, опять же не подходя к ноуту. К ноуту он подойдет уже в конце обработки всех предметов сканирования и сохранит отчет.  

  Я показывал ранее пример таблицы. Это даже не пример, а реальная таблица с которой работает человек. Изначально там пустая только колонка с теми данными, которые получаем в результате сканирование (набор символов (буквы и цифры)). В остальных колонках этой таблицы проставлены различные функции, которые и разбирают на части полученные со сканнера данные и в последней колонке выводят результат, выполнено ли условие или нет.  
Т.е. таблица уже вроде как заполнена, не хватает только данных со сканера, чтобы в нужной колонке вывести результат анализа. Так как в нужной нам колонке стоят функции, а данных нет, то и выводятся #N/A. А новые данные заносятся в таблицу построчно. Не вижу смысла в дополнительном поле отмечать «обработано». Или просто я немножко не понял смысл Вашего «обработано»….

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

{quote}{login=Wasya}{date=11.11.2009 11:10}{thema=}{post} я немножко не понял смысл Вашего «обработано»….{/post}{/quote}  
Я предполагал, что человек, услышав сигнал, понимает, что что-то не так. Иначе зачем он вообще? И подходит к ноуту, чтобы выполнить то или иное действие.

 

wasya

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

{quote}{login=Юрий М}{date=11.11.2009 11:16}{thema=Re: }{post}  
Я предполагал, что человек, услышав сигнал, понимает, что что-то не так. Иначе зачем он вообще? И подходит к ноуту, чтобы выполнить то или иное действие.{/post}{/quote}  

  Особенности места работы человека не предполагают прямой видимости ноута. Это склад, там наставлены ряды с коробками, он ходит сканирует их, и услышав звук помечает их для дальнейшей специальной обработки.    

  Юрий, в том примере нашей реальной таблицы возможно реализовать озвучку? На всякий случай прикрепляю ее заново.

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

Что-то мы застопорились :-) Может быть Вам нужно так: появилась единичка — комп завопил. Пока идут двойки — он молчит. Затем ЕЩЁ появилась единичка, но комп среагирует ТОЛЬКО на новую единичку, все «старые» пропустит. Или опять не так?

 

{quote}{login=Юрий М}{date=11.11.2009 11:35}{thema=}{post}Что-то мы застопорились :-) Может быть Вам нужно так: появилась единичка — комп завопил. Пока идут двойки — он молчит. Затем ЕЩЁ появилась единичка, но комп среагирует ТОЛЬКО на новую единичку, все «старые» пропустит. Или опять не так?{/post}{/quote}  

    дадада!!! именно так! реагировать нужно только на новую единичку!!

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

Ну ёлы-палы!!! А сразу вот так нельзя было сказать? Мне придётся использовать дополнительный столбец для этого. Его можно скрыть (если мешает). Так устроит?

 

wasya

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

{quote}{login=Юрий М}{date=11.11.2009 11:39}{thema=}{post}Ну ёлы-палы!!! А сразу вот так нельзя было сказать? Мне придётся использовать дополнительный столбец для этого. Его можно скрыть (если мешает). Так устроит?{/post}{/quote}  

  :) сорри за кривое тз :)  

  Да, на кол-во дополнительных столбцов пофиг, лишь бы текущая структура таблицы не страдала.

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

См. файл. Будет реагировать только на очередную единицу. После этого в соседней ячейке проставит метку, и в дальнейшем не будет на эту строку обращать внимания. Выделяется «новая» ячейка с единичкаой и она закрашивается. Затем заливка снимается. Если заливку всех единиц требуется оставить — нужно немного доработать. В коде небольшой комментарий.

 

wasya

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

Юрий, все отлично работает как и требовалось.  

  У меня правда возникли сложности… Например значение колонки А проставляется функцией, а когда мы имеем дело с уже готовой таблицей, где все ячейки в колонке А забиты функциями, но исходных параметров для подсчета значения этой ячейки нет, то в этой колонке во всех ячейках проставлены #Н/Д или #ЗНАЧ!, вот тут макрос дает сбой, говоря Type mismatch. Это как-нибудь можно обойти?

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

А какой символ должен быть при положительном результате?

 

wasya

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

{quote}{login=Юрий М}{date=12.11.2009 12:54}{thema=}{post}А какой символ должен быть при положительном результате?{/post}{/quote}  

  Сейчас по умолчанию стоит «Х», но это легко исправить, в этой колонке функция ЕСЛИ…

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

С Вами весело: если бы Вы написали «F» — и вопросов бы не возникло с раскладкой. А так есть ещё А, С, Т, Н…

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

Видимо я тонко пошутил, раз нет ответа :-) Там ХА или ИКС? В ЕСЛИ можно подавить появление ошибки или это обязательное условие?

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

Нет ответа — смотрите мой вариант с цифрами.

 

wasya

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

Сорри, просто вчера уже вырубился :)))  

  Юрий, сегодня на работе применил Ваш пример к нашей таблице. Изменил в IF(ISERROR(A2);»»;1) на IF(ISERROR(A2);0;1). С путым местом почему то не работало (в моей таблице, в Вашем варианте все работало). Плюс убрал строчку, выделяющую по завершению ячейку с результатом. В итоге имеем: при фокусе на ячейке, в которую заносятся данные со сканера, после сканирования выделяется следующая в этой колонке — можно сканировать снова.  

  В общем — все работает :) Урааааа!!!!!!!! Именно так как и нужно было.  
Юрий, БОЛЬШОЕ Вам спасибо, что потратили на мою просьбу о помощи 2 дня. От себя лично и от всех задействованных в процессе сканирования выражаю Вам огромную благодарность.  

  Хочу обратить внимание всех, что данная фича может быть весьма полезной как минимум для тех, кто связан со сканированием чего-либо и имеет ограниченный доступ к дисплею. Здесь, в этом топике, Юрий сделал практически готовое решение для подобных задач. Благодаря комментариям в коде, эту фичу может применить к своим конкретным задачам практически любой мало-мальски разбирающийся в экселе гражданин (как я).  

  Юрий, еще раз — спасибо Вам!

 

pikova_dama

Пользователь

Сообщений: 1
Регистрация: 01.01.1970

{quote}{login=ZVI}{date=23.10.2008 06:31}{thema=Re: Вставить звуковой сигнал при исполнении условия}{post}См. приложение{/post}{/quote}  

  Добрый день!  
Меня очень интересует данный вопрос.  
Подскажите пожалуйста, можно ли (если да, то каким образом ?)посмотреть прикрепленный файл: post_35713.rar

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#60

11.08.2010 16:10:17

У меня Опера, архивы сразу отказывается открывать. Упрашиваю:  
Правый клик на ссылке и «сохранить в папке загрузки». Из этой папки открываю.

В Excel мы можем применить условное форматирование для форматирования и выделения ячеек для соответствия условию по мере необходимости, но иногда вы можете захотеть воспроизвести звук, если условие выполнено. Например, если значение ячейки в A1 больше 300, я хочу, чтобы воспроизводился звук. Excel не поддерживает эту функцию, в этой статье я представлю некоторые коды VBA для решения этой задачи.

Воспроизведение звукового сигнала системы по умолчанию на основе значения ячейки с кодом VBA

Воспроизвести собственный звук на основе значения ячейки с кодом VBA

Воспроизвести звук, если ячейка изменение значения в определенном столбце с кодом VBA


Содержание

  1. Воспроизвести звуковой сигнал системы по умолчанию на основе значения ячейки с кодом VBA
  2. Воспроизвести собственный звук на основе значения ячейки с кодом VBA
  3. Воспроизвести звук, если значение ячейки изменяется в определенном столбце с кодом VBA

Воспроизвести звуковой сигнал системы по умолчанию на основе значения ячейки с кодом VBA

Вот удобный код для воспроизведения звукового сигнала системы по умолчанию при выполнении определенного условия, пожалуйста, сделайте это:

1. Удерживая ALT + F11 , откроется Окно Microsoft Visual Basic для приложений .

2 . Нажмите Вставить > Module и вставьте следующий код в окно Module .

Код VBA: воспроизведение звукового сигнала системы по умолчанию на основе значения ячейки:

3 . Затем сохраните и закройте это окно кода, вернитесь на рабочий лист и введите следующую формулу: = IF (A1> 300, BeepMe (), “”) в пустую ячейку рядом с ячейкой, содержащей значение, на основе которого вы хотите воспроизвести звук, а затем нажмите клавишу Enter , в ячейке формулы ничего не будет отображаться, см. снимок экрана:

4 . И теперь, если введенное значение в ячейке A1 больше 300, будет воспроизводиться системный звуковой сигнал по умолчанию.


Воспроизвести собственный звук на основе значения ячейки с кодом VBA

Если вы хотите воспроизвести какой-либо другой звук, кроме системы по умолчанию звуковой сигнал, здесь также код VBA может оказать вам услугу.

1 . Удерживая нажатыми клавиши ALT + F11 , откроется окно Microsoft Visual Basic для приложений .

2. Нажмите Вставить > Module и вставьте следующий код в окно Module .

Код VBA: воспроизведение определенного звука на основе значения ячейки:

3 . Затем сохраните и закройте это окно кода, вернитесь на рабочий лист и введите эту формулу: = IF (A1> 300, SoundMe (), “”) в пустую ячейку рядом с ячейкой, содержащей значение, на основе которого вы хотите воспроизвести звук, а затем нажмите клавишу Enter , в ячейке формулы ничего не будет отображаться, см. снимок экрана:

4 . С этого момента, если в ячейку A1 ввести значение больше 300, сразу будет воспроизводиться определенный звук.

Примечания : в приведенном выше коде вы можете изменить звуковой wav-файл по своему усмотрению, указав путь к файлу c: windows media . См. Снимок экрана:


Воспроизвести звук, если значение ячейки изменяется в определенном столбце с кодом VBA

Если вы хотите воспроизводить звук при изменении значения ячейки в определенном столбце, вы можете применить следующий код VBA.

1 . Щелкните правой кнопкой мыши вкладку листа, на которой вы хотите воспроизводить звук при изменении значения в столбце, затем выберите Просмотреть код в контекстном меню и в открывшемся Microsoft Visual Basic для приложения скопируйте и вставьте следующий код в пустой модуль:

Код VBA: воспроизведение звука при изменении значения ячейки в столбце:

Примечание : В приведенном выше коде число 3 в скрипте Columns (3) – это номер столбца, в котором вы хотите воспроизводить звук при изменении значения в этом столбце.

2 . А затем сохраните и закройте это окно кода, теперь, если значение ячейки изменится в третьем столбце, будет воспроизводиться системный звуковой сигнал по умолчанию.


Соответствие клавиш клавиатуры компьютера нотам (как на клавиатуре баяна)

Самый простой вариант извлечь звук при помощи макроса 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

Понравилась статья? Поделить с друзьями:
  • Звуки для word 2010
  • Звуки для microsoft word
  • Звук только в excel
  • Звездочки в тексте word
  • Звездочка в excel это