Страницы: 1 2 След.
RSS
Звуковое оповещение макросом при изменении значений в ячейках столбца, Нужная вещь для повседневной работы
 
Уважаемые специалисты!
Не могу сказать, что я тупой, но показался  себе таким, когда столкнулся с вашей профессиональной сферой. Нужно  написать простенький макрос для Excel 2003. Приложил все усилия, чтобы  сделать это самостоятельно, перелопатил тонны информации, но, видимо,  это не мое. Ничего не могу поделать и вынужден обратиться к вам. Итак,  нужен простой макрос. Макрос должен постоянно проверять один столбец N:N  - 14-й по счету. Таблица заполнена постоянно меняющимися данными,  меняющимися потому, что на другом листе подгружаемая с сайта информация.  Эти данные распределяются по таблице, рассчитываются различными  формулами и т.д. В столбце N:N тоже стоят формулы, и значения в ячейках  могут быть 0 и 1. В большинстве своем там стоят нули, но иногда  появляются единицы. Так вот, о появление такой единицы макрос должен  оповещать звуком. Т.е., проверка столбца должна производиться постоянно.  Данные обновляются раз в минуту.
Подобная тема обсуждалась здесь: http://www.planetaexcel.ru/forum/index.php?FID=8&PAGE_NAME=read&TID=5846
Но, это не совсем то. Макрос такого типа для одной ячейки мне подошел и работает:
Код
Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long 
  
Private Sub Worksheet_Change(ByVal Target As Range) 
 If [N2] <> "" And [N2] = [N1] Then 
   mciExecute ("Play C:\Windows\Media\tada.wav") 
 End If 
End Sub 

Но все мои попытки разобраться с остальными ячейками в столбце N:N  терпят сокрушительный крах. В ячейке N1 у меня стоит единица, как  образец для макроса, ее я могу убрать, если понадобится. Понимаю, что  макрос должен быть предельно простой, но моих умственных способностей не  хватает, к сожалению, решить этот вопрос. Помогите, пожалуйста!
Изменено: meller - 01.07.2017 18:24:57
 
Worksheet_Change не детектит пересчёт формулы! Потому что в ячейке ничего не  изменяется (что там было записано, то и осталось), что логично.
 
Вам нужно событие calculate проверять а ещё лучше выложить пример и указать что меняется и как.
Изменено: skais675 - 01.07.2017 18:47:42
 
Код
 If Not Intersect(Target, Range("N:N")) Is Nothing And Target = 1 Then
   mciExecute ("Play C:\Windows\Media\tada.wav")
 End If
 
kavaka08,Спасибо Вам огромное! Все работает отлично! Коротко и просто, как  и предполагал. Благодарю! Посмотрим как поведет себя в работе.
Цитата
Изменено: meller - 01.07.2017 18:56:09
 
У меня tada не звучит, не стал менять код - просто следите за месиджбоксом, можете вместо него поставить свой звук.
P.S. файл удалил, ибо ниже есть версия в xls
Изменено: Hugo - 01.07.2017 19:26:20
 
Hugo, у меня 2003 - не открывается файл
 
Сохранил в xls
 
Игорь, ты количество единиц считаешь?
 
Естественно нет :)
 
;)  
 
Не, что-то не то: если исчезает уже существующая единица, то макрос тоже срабатывает. А если исходить из этого
Цитата
meller написал:
о появление такой единицы макрос должен  оповещать звуком
то этого быть не должно.
meller, уточните, если появилась единица - понятно, а если она исчезла?
 
Цитата
Hugo написал:
У меня tada не звучит, не стал менять код - просто следите за месиджбоксом, можете вместо него поставить свой звук.
P.S. файл удалил, ибо ниже есть версия в xls
Не совсем понял... Что значит детектерить пересчет формулы и для какой это цели... Tada действительно не звучит, но у меня не получается визуально следить, в том-то и дело. И вот этот месседжбокс, это он в итоге что показывает?
 
kavaka08,н-да, засада, когда меняешь руками - все звучит во всех ячейках, но дело в том, что в них вычисляют формулы, и вот результаты этих вычислений - нужные нам единицы - не улавливает макрос...

может что-то мешает? формулы во всех ячейках такого типа:
Код
=ЕСЛИ(ЕОШИБКА(ЕСЛИ(J2>G2/3;"0";ЕСЛИ(K2>F2/1.3;"0";"1")));0;ЕСЛИ(J2>G2/3;"0";ЕСЛИ(K2>F2/1.3;"0";"1")))
Изменено: meller - 01.07.2017 20:20:29
 
Цитата
meller написал:
И вот этот месседжбокс, это он в итоге что показывает?
- так там ведь написано! :)
Правда не совсем правду там написал - сообщение появляется если изменилось расположение, а не количество единиц.
И да, если просто пропала одна единица - тоже сообщит. Если это лишнее - нужно думать, но сделать можно.
Если знать, что изменяться эти единицы могут только по-одной, тогда всё сильно упрощается - можно действительно только их подсчитывать, и кричать только если количество увеличилось.
Ну а работает всё это дело... Вы название файла видели? :)
Изменено: Hugo - 01.07.2017 19:47:16
 
meller, об этом ещё в #2 Игорь сказал: событие листа Change не подойдёт.  
 
Цитата
Hugo написал:
- так там ведь написано!
=СУММПРОИЗВ((N1:N9=1)*(СТРОКА(N1:N9))) вот эта формула что дает?
 
meller, Вы все сообщения, которые адресованы Вам, читаете?
 
Вопрос был
Цитата
meller написал:
И вот этот месседжбокс, это он в итоге что показывает?
- вот на этот вопрос я и отвечал.
 
Цитата
Юрий М написал:
уточните, если появилась единица - понятно, а если она исчезла?
Макрос должен оповещать только о появлении единицы - это единственная его задача - известить, что событие наступило
 
Тогда вариант с такой формулой не подойдёт: срабатывает, и в том случае, когда единица исчезает (
 
По формуле - вообще-то поспешил, она неидеальна, её можно случайно "обмануть", нужно вероятно не сумму номеров строк выводить, а склеивать строку из номеров.
Но т.к. я не формулист, склеить могу только с помощью UDF, думаю есть способ сделать проще...
По поводу "только когда появилась" - а если вдруг исчезло две штуки, а появилась одна?
Похоже задача не так проста, если возможны всякие варианты...
 
Цитата
Hugo написал:
Если знать, что изменяться эти единицы могут только по-одной, тогда всё сильно упрощается - можно действительно только их подсчитывать, и кричать только если количество увеличилось.
Ну а работает всё это дело... Вы название файла видели?
Единицы появляются по одной, но существует вероятность, хоть и небольшая, что получится одновременное появление двух-трех единиц. Название файла видел, но, честно признаться, текстбокс понятие для меня незнакомое... я не специалист ) точнее специалист, но совсееем в другой сфере )
 
Цитата
Hugo написал:
а если вдруг исчезло две штуки, а появилась одна?
В том то и дело... Да даже такой вариант: одна появилась, а одна исчезла.
 
Цитата
Юрий М написал:
В том то и дело... Да даже такой вариант: одна появилась, а одна исчезла.
Да, вот надо, чтобы именно на единицу реагировал
 
Получается нужно где-то хранить предыдущую информацию или как-то организовать так, чтобы было что с чем сравнивать а именно переход с 0 на 1, и тогда оповещать.
 
Ну на случай "одна появилась, а одна исчезла" у меня уже детектит. Но например если единицы были в позициях 4 и 5, и вот они заменились на новую в позиции 9 - и макрос промолчит... :)
А сколько всего ячеек нужно отслеживать максимум? Миллион?
 
Цитата
skais675 написал:
Получается нужно где-то хранить предыдущую информацию или как-то организовать так, чтобы было что с чем сравнивать а именно переход с 0 на 1, и тогда оповещать.
Это в макрос можно зашить? Чтобы он копировал столбец N:N после каждого сравнения... но тогда нужно выбирать какой-то временной промежуток для такого сравнения. Можно конечно сделать, скажем, минуту... Но, мне кажется, решение окажется намного проще, по-моему мы все усложняем
 
Цитата
Hugo написал:
на случай "одна появилась, а одна исчезла" у меня уже детектит.
Игорь, но у тебя сработает и на исчезновение единички (
 
Цитата
Hugo написал:
А сколько всего ячеек нужно отслеживать максимум? Миллион?
Количество ячеек меняется. Пока в пределах 100-120.
Страницы: 1 2 След.
Читают тему
Наверх