|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.10.2015, 13:24 | #1 |
Регистрация: 08.10.2015
Сообщений: 5
|
Программное прерывание вывода данных по DDE в Excel
У меня в Excel ( на лист рабочей книги) выводятся данные по DDE из таблицы биржевого терминала QUIK...Далее я это все обрабатываю с помощью кода написанного на VBA. Программный код инициализируется с помощью стандартной процедуры - Worksheet_Calculate().
На время обработки кода есть необходимость программным образом приостановить на короткое время вывод данных по DDE а потом опять запустить т.е. чтобы данные на какое время не выводились на лист. Т.е. какое время DDE сервер будет накапливать эти данные в буфере ( не теряя) до тех пор пока вывод не будет разрешен опять.Не подскажете каким образом это можно сделать включив определенную команду или метод в программный код VBA? Поясню - похожий процесс можно наблюдать когда пытаешься редактировать данный лист ( куда выводятся данные по DDE) - тогда вывод данных по DDE приостанавливается до тех пор пока будет закончено редактирование листа. Или еще - нажимаешь правой клавишей мыши на любую ячейку данного листа - вывод приостанавливается тоже, отпускаешь - вывод данных продолжен...Конечно можно, наверно, сделать эмуляцию этих действий в программном коде но это на мой взгляд достаточно неэффективно и опять таки не очень быстро. Хотелось бы узнать более краткий и эффективный метод такого прерывания.. |
08.10.2015, 16:16 | #2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
самый простой способ - отобразить userform (в модальном режиме),
при запуске которой в коде формы запустится таймер, который подождет несколько секунд, и закроет форму. эта форма должна блокировать Excel также, как и редактирование ячейки или еще проще: Код:
|
08.10.2015, 16:56 | #3 |
Регистрация: 08.10.2015
Сообщений: 5
|
Мне нужно прерывание ровно на время работы кода. Т.е. в начале работы кода нужно прервать вывод DDE данных а в конце - возобновить...Код работает миллисекунды. Поэтому увы - это не подойдет...
|
09.10.2015, 15:04 | #4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
свой код переносите в модальную форму
вместо запуска кода выполняете запуск формы форма при запуске запустит код код, когда отработает, закроет форму - данные снова начнут поступать буквально 4-5 строк кода надо дополнительно + пустая форма |
10.10.2015, 22:39 | #5 |
Регистрация: 08.10.2015
Сообщений: 5
|
EducatedFool я понял смысл этой конструкции - спасибо за идею. Но столкнулся с такой проблемой: когда я использую готовую форму msgbox - Например:
msgbox "Нажмите OK для продолжения" то она действительно блокирует вывод DDE данных на лист пока ее не закроешь вручную....т.е. она действительно обладает модальностью на уровне приложения и блокирует все остальные процессы в нем. Когда я использую ( по вашему совету) собственную USERFORM то такого не происходит, хотя по умолчанию она работает в модальном режиме. Для проверки этого я использовал такой вариант: Основной код: Sub Макрос1() UserForm1.Show End Sub Внутри самой пустой формы код такой: Private Sub UserForm_Activate() Application.OnTime Now + TimeValue("00:00:10"), "myTimerCount" End Sub В которой вызывается процедура закрытия самой формы через 10 секунд: Sub myTimerCount() Unload UserForm1 End Sub Т.е. я вызываю USERFORM на 10 секунд а потом ее закрываю. Все работает но поток DDE данных не блокируется в отличии от диалоговой формы Msgbox, которая действительно это делает НО ее необходимо закрывать вручную ( по крайней мере программного способа я не знаю). Как наделить собственную USERFORM необходимой модальностью на уровне приложения чтобы она блокировала поток данных DDE подобно MsgBox? На всякий случай - у меня MS Office 2007... Последний раз редактировалось aligerno; 10.10.2015 в 23:45. |
12.10.2015, 23:12 | #6 |
Регистрация: 08.10.2015
Сообщений: 5
|
EducatedFool, можете подсказать с учетом того что я сказал выше?
|
13.10.2015, 07:16 | #7 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Я не смогу подсказать, - идей больше нет (как нет и опыта работы с DDE)
Может, кто из форумчан еще чего посоветует |
13.10.2015, 23:00 | #8 |
Регистрация: 08.10.2015
Сообщений: 5
|
В любом случае - Спасибо за идею! Будем искать дальше...
|
14.10.2015, 06:07 | #9 |
Пользователь
Регистрация: 03.08.2012
Сообщений: 38
|
Посмотри http://www.cyberforum.ru/vba/thread1111656.html
и ещё у Казанского (с) был свой Msgboxex |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
В ответ на DDE запрос приходит идентификатор данных | Sauber | Общие вопросы Delphi | 1 | 13.11.2013 12:12 |
DDE клиент, нет соединения с DDE сервером на XE2XE2 | nfo52 | Общие вопросы Delphi | 0 | 19.08.2012 09:17 |
Передача по DDE данных | AlexZZZ2010 | Общие вопросы .NET | 0 | 20.12.2010 13:00 |
VBA,Excel,DDE | Евгений_12 | Microsoft Office Excel | 0 | 24.05.2010 15:22 |
Прием данных по DDE | chigik | Microsoft Office Excel | 3 | 13.05.2009 10:47 |