|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.06.2011, 16:05 | #1 |
Пользователь
Регистрация: 26.12.2010
Сообщений: 85
|
Как обрабатывать события с задержкой?
Прошу помочь советом, в скрипте по таймеру работает процедура и также приходят события из внешнего источника.
Вопрос 1 - если событий много, то любые манипуляции с листом приводят к прекращению работы скрипта с ошибкой. Попытка поставить DoEvents первой строкой в обработке событий ничего не меняет. Можно ли каким то образом производить манипуляции с листом, если идет обработка событий? Вопрос 2 - если событий мало. Иногда возникает ситуация, когда по времени совпадает обработка переменной в событии и в процедуре, в результате чего переменная получает неправильное значение. Есть ли возможность в VBA Excel заставить событие обрабатываться с задержкой - только по окончанию выполнения процедуры? Этот вопрос более важен, поэтому в названии темы. Заранее спасибо за советы. |
12.06.2011, 16:38 | #2 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
А случайно данные не по DDE получаете?
Анализ,обработка данных Недорого
|
12.06.2011, 16:59 | #3 |
Пользователь
Регистрация: 26.12.2010
Сообщений: 85
|
) я не знаю, что такое dde.
Есть сторонняя библиотека, которая подключена в ексел и по ней приходит событие. В более продвинутых языках есть понятие коллекция, которое вроде может помочь в этом вопросе, но хотелось бы на VBA притормаживать события. |
12.06.2011, 17:01 | #4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Запускайте процедуру не с задержкой, а после поступления данных.
Определить момент поступления данных на лист вам поможет событие пересчёта формулы: http://www.programmersforum.ru/showp...86&postcount=4 |
12.06.2011, 17:16 | #5 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
Я сталкивался с такой ситуацией.когда данные идут по DDE непрерывно,хотя указан интервал 1 минута.А обновляются как хотят.
Ни как не мог нормально обработать.Пришлось получать данные по DDE в программу,обрабатывать.потом на лист. Алгоритм обработки очень сложный был,сбои мешали Пример платформа МТ5.
Анализ,обработка данных Недорого
|
12.06.2011, 18:34 | #6 |
Пользователь
Регистрация: 26.12.2010
Сообщений: 85
|
Вариант запускать процедуру после обработки события не подходит, ибо событие может случиться в любой момент, поэтому и возникла мысль упорядочить обработку событий через притормаживание поступившего события до момента окончания выполнения процедуры.
|
12.06.2011, 18:43 | #7 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
если разговаривать общими словами,без конкретики,то ответа скорее всего не получите
На конкретную ситуацию-свое решение
Анализ,обработка данных Недорого
|
12.06.2011, 20:06 | #8 |
Пользователь
Регистрация: 26.12.2010
Сообщений: 85
|
Меня бы вполне устроил общий ответ, возможно ли это сделать просто, введением какого-либо оператора, который бы притормозил событие до завершения процедуры без дополнительного сложного кода )
|
12.06.2011, 20:34 | #9 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
Вот так я ожидаю завершения работы архиватора,
но такой вариант вам может и не подойти. Надо конкретно знать.какое событие вы ожидаете. В VBa многопоточности нет.Пока не отработает одна процедура вторая не начнет работать. Код:
Анализ,обработка данных Недорого
|
12.06.2011, 21:36 | #10 |
Пользователь
Регистрация: 26.12.2010
Сообщений: 85
|
Спасибо за пример, но, похоже, пока писал, придумал как сделать - в событии присваивать значение не основной переменной, а промежуточной, а в начале процедуры основной переменной присваивать значение промежуточной переменной.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать временной цикл с задержкой 0,1 сек? | clever77 | Microsoft Office Excel | 15 | 16.03.2016 11:36 |
Как обрабатывать данную ситуацию? | Arkuz | БД в Delphi | 2 | 08.12.2008 02:51 |
Как заставить компонент TTrackBar обрабатывать события мыши? | Никки | Общие вопросы Delphi | 5 | 29.08.2008 14:17 |
Как обрабатывать нажатие на кнопке? | AidarBik | Win Api | 13 | 05.02.2008 19:58 |
как обрабатывать события с клавы? | proglamer | Паскаль, Turbo Pascal, PascalABC.NET | 13 | 25.10.2007 11:41 |