Страница 1 из 1
Worksheet_change или calculate?
Добавлено: 09 ноя 2006, 06:46
Eskra
Столкнулся с проблемой.
По DDE периодически в Эксель поступают данные. Необходимо, чтобы макрос срабатывал при поступлении новых данных. В данном случае разумно использовать Calculate, но удобнее использовать Change, т.к. здесь есть Target. Но проблема в том, что Change не срабатывает

Видимо из-за того, что он срабатывает после выхода из ячейки.
Как это можно обойти?
Добавлено: 09 ноя 2006, 14:43
Naeel Maqsudov
Странно, что по изменению по DDE-запросу не пороисходит Change...
Впрочем, если это так - то у нас нет другой альтернативы, как использовать Calculate. При использовании Calculate надо учесть, что если макрос-обработчик этого события будет сам записывать что-то на лист, то это приведет к рекурсивному вызову этого события и, соответственно, к зацикливанию макроса. Т.е. надо либо на писать ничего в этот же лист, либо предусмотреть предотвращение рекурсивного вызова (если будет нужно спрашивайте)
Найти ячейку, подлежащую обработке, скорее всего не составит труда. Либо это всегда одна и та же ячейка (если DDE-запрос складывает данные в одно и то же место), либо последняя строка в таблице.
Для надежности можно "научить" макрос как-нибудь помечать уже обработанные строки, или в какую-нибуть определенную ячейку записывать номер обработанной строки. Пусть следующий запуск макроса продолжает работу как бы с того, где предыдущий закончил.
Добавлено: 09 ноя 2006, 15:04
Eskra
Мне как раз и надо понадежней

Я, в принципе, все так и реализовал, но хотел все-таки выяснить до конца с Change. Уж очень удобно. Благодарю за ответ!
Добавлено: 10 ноя 2006, 01:03
pashulka
Eskra, Событие Worksheet_Change не вызывается при пересчёте и изменении значений формул, а DDE-запросы MS Excel воспринимает именно так, поэтому, Вы конечно же можете использовать Worksheet_Calculate, но можете и посмотреть справку касательно метода SetLinkOnData об'екта Workbook, возможно он окажется Вам полезен ...
Добавлено: 10 ноя 2006, 05:58
Eskra
Спасибо... буду пробовать
