Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2009, 14:46   #1
sart21
 
Регистрация: 22.02.2009
Сообщений: 4
По умолчанию DDE с задержкой

Люди добрые!
Помогите, не могу разобраться, что не так в коде, получаю котировки через DDE, но их так много, что за одну секунду пишеться 4-5 строк, цель макроса такова, что бы выставить паузу желаемой длинны, прикрутил форму в которой выставляется время задержки, котировки накапливаются на другом листе, при этом Excel висит, может кто подскажет и другие пути решения задачи
Вложения
Тип файла: zip Данные.zip (20.2 Кб, 37 просмотров)
sart21 вне форума Ответить с цитированием
Старый 22.02.2009, 15:16   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В Вашем проекте можно заменить код:
Код:
i = Worksheets("Накопительный").UsedRange.Rows.Count
Worksheets("Накопительный").Cells(i + 1, 2).Value = Worksheets("Исходный").Cells(2, 2).Value
Worksheets("Накопительный").Cells(i + 1, 3).Value = Worksheets("Исходный").Cells(3, 2).Value

' много-много одинаковых строк

Worksheets("Накопительный").Cells(i + 1, 54).Value = Worksheets("Исходный").Cells(54, 2).Value
Worksheets("Накопительный").Cells(i + 1, 55).Value = Worksheets("Исходный").Cells(55, 2).Value
на код
Код:
    Dim СледующаяЯчейка As Range ' ищем первую незаполненную ячейку во втором столбце
    Set СледующаяЯчейка = Worksheets("Накопительный").Cells(Rows.Count, 2).End(xlUp).Offset(1)

    Worksheets("Исходный").Range("b2:b55").Copy ' копируем диапазон

    СледующаяЯчейка.PasteSpecial xlPasteValues, , , True ' вставляем с транспонированием

    СледующаяЯчейка.Previous = Time ' в 1 столбец пишем время
То есть, исходный диапазон копируется, а вставка производится с транспонированием.
Так будет работать побыстрее...


Цитата:
но их так много, что за одну секунду пишеться 4-5 строк, цель макроса такова, что бы выставить паузу желаемой длинны
Так в чём проблема? Код Вы написали правильно.
Ставим в поле на форме интервал 0,2 вместо 1, и макрос будет записывать по 5 строк в секунду.

Может, Вам надо отслеживать событие обновления данных на листе, вместо запуска макроса с постоянным интервалом?

Последний раз редактировалось EducatedFool; 22.02.2009 в 15:29.
EducatedFool вне форума Ответить с цитированием
Старый 22.02.2009, 15:34   #3
sart21
 
Регистрация: 22.02.2009
Сообщений: 4
По умолчанию

Спасибо за совет по оптимизации кода, счас попробую переписать, проблемку Вы не поняли, во время исполнения макроса Excel зависает, не реагирует ни на какие команды, при этом котировки записываются, и время я выставляю 5 секунд, так как при маленьком таймфрейме 1 сек пишеться слишком много информации
sart21 вне форума Ответить с цитированием
Старый 22.02.2009, 15:45   #4
sart21
 
Регистрация: 22.02.2009
Сообщений: 4
По умолчанию

Всё таки распишу подробней, котировки поступают через DDE на лист "Исходный" Запись поступающих котировок производится на лист "Накопительный" при выставлении паузы в 5 секунд производится запись на лист "Накопительный" со смещением ячеек вниз, вроде всё работает, но Excel , зависает при работе не реагирует ни одна кнопка, кроме моей формы, где стоит нажать "СТОП" и EXCEL ачинает реагировать
sart21 вне форума Ответить с цитированием
Старый 22.02.2009, 15:47   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
во время исполнения макроса Excel зависает, не реагирует ни на какие команды
Так и должно быть - по умолчанию форма запускается в модальном режиме.

Найдите среди свойств формы свойство ShowModal, и установите его в False
И будет Вам счастье
EducatedFool вне форума Ответить с цитированием
Старый 22.02.2009, 16:03   #6
sart21
 
Регистрация: 22.02.2009
Сообщений: 4
По умолчанию

Ещё раз спасибо, как настрою выложу рабочую форму, может кому пригодиться.
sart21 вне форума Ответить с цитированием
Старый 26.12.2009, 23:27   #7
NAN
Новичок
Джуниор
 
Регистрация: 26.12.2009
Сообщений: 2
По умолчанию

Цитата:
Сообщение от sart21 Посмотреть сообщение
Ещё раз спасибо, как настрою выложу рабочую форму, может кому пригодиться.
Я при такой-же проблеме вставил в цикл DoEvents, процессор стал загружен на 25%, остальные проги работают.
Nobody_And_Nothing
NAN вне форума Ответить с цитированием
Старый 14.08.2011, 18:54   #8
norvik
 
Регистрация: 14.08.2011
Сообщений: 5
По умолчанию

[/QUOTE]

Может, Вам надо отслеживать событие обновления данных на листе, вместо запуска макроса с постоянным интервалом?[/QUOTE]

Извиняюсь, а вы не могли бы подсказать как поменять код, чтобы запись шла именно так, то есть по мере каждого обновления полученных значений? Может ли макрос отслеживать сам факт получения новых
значений с дде сервера, если они идентичны ранее полученным величинам и поступили с большой скоростью, например 30 раз
за 50 миллисекунд?
norvik вне форума Ответить с цитированием
Старый 14.08.2011, 19:13   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Да, может.
Примеров таких макросов на форуме множество.

Например, здесь: http://www.programmersforum.ru/showthread.php?t=40744

Суть: пишем в любую ячейку формулу, ссылающуюся на обновляемый по DDE диапазон,
и обрабатываем событие пересчёта формул Worksheet_Calculate
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с dde AndreiFX Общие вопросы Delphi 0 17.11.2008 06:07
таймер с задержкой на включение amandra Общие вопросы Delphi 3 22.04.2008 23:20
многострочная подсказка с задержкой dimonbest Общие вопросы Delphi 6 24.03.2008 13:13
Вопрос по DDE AlphA Работа с сетью в Delphi 0 28.12.2007 22:51