По DDE периодически в Эксель поступают данные. Необходимо, чтобы макрос срабатывал при поступлении новых данных. В данном случае разумно использовать Calculate, но удобнее использовать Change, т.к. здесь есть Target. Но проблема в том, что Change не срабатывает Видимо из-за того, что он срабатывает после выхода из ячейки.
Как это можно обойти?
Странно, что по изменению по DDE-запросу не пороисходит Change...
Впрочем, если это так - то у нас нет другой альтернативы, как использовать Calculate. При использовании Calculate надо учесть, что если макрос-обработчик этого события будет сам записывать что-то на лист, то это приведет к рекурсивному вызову этого события и, соответственно, к зацикливанию макроса. Т.е. надо либо на писать ничего в этот же лист, либо предусмотреть предотвращение рекурсивного вызова (если будет нужно спрашивайте)
Найти ячейку, подлежащую обработке, скорее всего не составит труда. Либо это всегда одна и та же ячейка (если DDE-запрос складывает данные в одно и то же место), либо последняя строка в таблице.
Для надежности можно "научить" макрос как-нибудь помечать уже обработанные строки, или в какую-нибуть определенную ячейку записывать номер обработанной строки. Пусть следующий запуск макроса продолжает работу как бы с того, где предыдущий закончил.
Eskra, Событие Worksheet_Change не вызывается при пересчёте и изменении значений формул, а DDE-запросы MS Excel воспринимает именно так, поэтому, Вы конечно же можете использовать Worksheet_Calculate, но можете и посмотреть справку касательно метода SetLinkOnData об'екта Workbook, возможно он окажется Вам полезен ...