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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2012, 21:42   #1
peq
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 233
По умолчанию макрос - тайминг

добрый день.

есть xlsm-файл, на котором ряд данных каким-то образом обновляется.
мне бы хотелось, чтобы, скажем, раз в 0,5 секунды запускался макрос, который будет делать что-то (напр. msgbox)
все остальное время должны выполняться другие процессы, процессор должен быть не занят.

если кто-нибудь знает, как это сделать, напишите, пожалуйста, команду.

над worksheet.change я думал, это не совсем то, а других вариантов я, к сожалению, не вижу

Последний раз редактировалось peq; 11.04.2012 в 21:45.
peq вне форума Ответить с цитированием
Старый 11.04.2012, 21:57   #2
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Посмотрите ЗДЕСЬ
А вообще, поиск по форуму - таймер
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 12.04.2012, 13:10   #3
peq
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 233
По умолчанию

Спасибо, Виктор.

наткнулся на какой-то парадокс

при
>>Application.OnTime Now + TimeSerial(0, 0, 0.51), "NextTime"
>>Application.OnTime Now + TimeSerial(0, 0, 0.6), "NextTime"
>>Application.OnTime Now + TimeSerial(0, 0, 0.8), "NextTime"
загрузка процессора ~20%
при
>>Application.OnTime Now + TimeSerial(0, 0, 0.5), "NextTime"
и меньше загрузка процессора =100%

вы не знаете, из-за чего такое может возникать?
в файл импортятся данные из разных источников, во времени данные приходят вроде бы равномерно.
peq вне форума Ответить с цитированием
Старый 12.04.2012, 14:17   #4
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
вы не знаете, из-за чего такое может возникать?
нет, не могу сказать
причин может быть много
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 12.04.2012, 16:05   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
>>Application.OnTime Now + TimeSerial(0, 0, 0.5), "NextTime"
и меньше загрузка процессора =100%
потому что TimeSerial округляет количество секунд.

когда вы ставите 0,5 - TimeSerial понимает это как 0 секунд, и запускает макрос моментально
когда вы ставите 0,51 или больше - TimeSerial понимает это как 1 секунду, и запускает макрос через секунду

Чтобы запускать макрос чаще, чем раз в секунду, воспользуйтесь этим решением:

Цитата:
10. Использование Application.OnTime с задержкой меньше секунды

Код:
Sub ЗапускМакросаСНебольшойЗадержкой() ' по мотивам макроса ZVI_Timer
   ЗадержкаВСекундах = 0.3    ' в секундах
   НазваниеМакроса$ = "test"    ' этот макрос будет запущен через 0.3 сек.
   ЗадержкаВЧасах$ = Replace(Format(CDbl(TimeSerial(0, 0, 1)) * ЗадержкаВСекундах, "0.000000000"), ",", ".")
    macro = "ON.TIME(NOW()+" & ЗадержкаВЧасах$ & ", """ & НазваниеМакроса$ & """)" ' формируем команду запуска
   ExecuteExcel4Macro macro ' macro = ON.TIME(NOW()+0.000003472, "test")
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 13.04.2012, 21:24   #6
peq
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 233
По умолчанию

понятно. спасибо большое.
peq вне форума Ответить с цитированием
Старый 14.04.2012, 10:24   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
CDbl(TimeSerial(0, 0, 1))
хмм.. а преобразование зачем? там же как был Double так и остался... умножение прекрасно и без него работает.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос постоянно обрабатывает события. При открытии другой книги макрос обрывается. Ples Microsoft Office Excel 8 17.12.2016 18:15
Exel - при открытии файла через макрос, если файл отсутствует - виснет весь макрос gregory1b Microsoft Office Excel 2 14.10.2010 11:51
Макрос, запускающий макрос из другого закрытого файла petruha Microsoft Office Excel 7 14.03.2010 11:31
Макрос вставки файлов в листы-Необходимо изменить ниже приведённый макрос as-is Microsoft Office Excel 4 25.02.2010 07:51
Макрос терпкая_весна Microsoft Office Excel 2 18.05.2009 12:53