|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
17.06.2008, 12:32 | #1 |
Регистрация: 17.06.2008
Сообщений: 5
|
пересчет таблицы с использованием макроса
Вообщем проблема вот в чем: есть таблица в excel, ее поля заполняются автоматически ссылкой =MT4|BID!AUDCHF т.е. из прогаммки MetaTrader (экспорт DDE) в excel транслируются котировки. далее я написал макрос, который по этим котировкам производит некоторые вычисления и выводит в этом же листе. но нужно сделать так, чтобы этот макрос запускался каждый раз при изменении любой котировки! пробовал сделать это через Private Sub Worksheet_Change(ByVal Target As Range) , но эта процедура как оказалось не реагирует на изменения котировок, т.е. если менять там занчения "руками" то она работает, т.е. перезапускает макрос, но если котировки меняются сами, то она уже не работает. вообщем очень нужна помощь с этой проблемой, как сделать так, чтобы макрос реагировал на изменения котировок? или хотя бы может быть можно чтобы он автоматически запускался раз в секунду...? буду рад любой помощи, заранее благодраен.
|
17.06.2008, 12:55 | #2 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Метод OnTime как раз для запуска процедуры по времени (см. help по VBA).
Чем шире угол зрения, тем он тупее.
|
17.06.2008, 13:26 | #3 |
Регистрация: 17.06.2008
Сообщений: 5
|
метод OnTime.... я думал об этом, только неочень понял как его запустить? т.е. если я хочу чтобы он запускал макрос каждые 5 секунд, то мне нужно сделать бесконечный цикл
Do While (i < 10) Application.OnTime Now + TimeValue("00:00:05"), "final" Loop но это не работает,потому что цикл проходит слишком бысто и просто получается десять таких вызывов подряд, которые выполняются слишком быстро. если же использовать метод wait, то программка подвисает на время выполнения, а мне нужно отслеживать изменения таблицы после каждого запуска макроса. |
17.06.2008, 15:15 | #4 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Например, так устроит?
Код:
Благодаря DoEvents, работе в Excel это не мешает.
Чем шире угол зрения, тем он тупее.
|
17.06.2008, 15:33 | #5 |
Регистрация: 17.06.2008
Сообщений: 5
|
здорово, спасибо, большое. есть еще небольшой вопрос, можно ли в excel устанавливать дробное время.... например чтобы запуск происходил через каждые полсекунды или 0.1 секунды?
|
17.06.2008, 15:37 | #6 |
Регистрация: 17.06.2008
Сообщений: 5
|
и еще вопросик... это ведь получается вечный цикл? как его остановить?
|
17.06.2008, 16:10 | #7 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
я делал так:
Sub Main() ' тут реальный код, что нужно сделать, например: Range("A1") = Range("A1") + 1 ' Это для примера и наглядности Application.OnTime Now + TimeValue("00:00:05"), "Main" End Sub ' DoEvents я выбрасывал, Эксель в этот момент реагирует на клавиши и на мышь, он свободен от выполнения макроса, он совершенно открыт для общения, можно писать формулы, открывать новые книги и все такое прочее, в коде только необходимо учитывать, что когда "это" буде выполняться, что в этот момент может быть открыта не та книга, не тот лист и в А1 может оказаться допустим текст Этот цикл точно нескончаемый. Остановить его можно, закрыв данный файл, (он еще на последок, уже после закрытия, ругнется что не нашел "Main"), или например, вписав в определенную ячейку определенное значение, а там, где должен выполняться "реальный код" сделать проверку этой ячейки с соответсвенными выводами.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
17.06.2008, 16:43 | #8 |
Регистрация: 17.06.2008
Сообщений: 5
|
спасибо большое, эт классно! вроде даже работает))
а что насчет дробного времени? есть возможность выполнять макрос чаще чем раз в секунду? |
17.06.2008, 17:18 | #9 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Кроме TimeValue есть еще SerialTime (может ошибся немного - пишу по памяти) задавал части секунды. честно говоря, хлебанул я горя с такой конструкцией.
Что-то у Экселя коряво происходит с этим всем (или скорее у меня). Вроде все очевидно, но...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
18.06.2008, 08:53 | #10 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
При помощи WinAPI-функции GetTikCount, можно устанавливать временные интервалы с точностью до миллисекунды. Посмотрите вложение. Запустите макрос (любой).
Еще добавлена возможность остановки работы такой конструкции: если в ячейку "B1" занести любое значение, то макрос остановится (соответственно, если "B1" не пуста - макрос не запустится).
Чем шире угол зрения, тем он тупее.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Автоматический запуск макроса | Len@ | Microsoft Office Excel | 6 | 23.07.2008 12:05 |
Перенос макроса в модуль | valerij | Microsoft Office Excel | 6 | 09.06.2008 23:13 |
Создание SetUp для макроса | Romuald | Microsoft Office Excel | 3 | 06.06.2008 12:23 |
Запись макроса | valerij | Microsoft Office Excel | 5 | 01.12.2007 00:49 |