![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 13.04.2011
Сообщений: 58
|
![]()
Здравствуйте!
Подскажите как организовать при помощи макроса временной цикл с шагом в 0,1 секунды? В книгу Excel поступают данные в диапазон ячеек А1:С21. Обновляются с 10:00 и до 19:00 с частотой 0,1 сек. Я пытаюсь сделать архив этих данных, копируя значения ячеек диапазона А1:С21 в те же столбцы, но со смещением строк на 22 позиции. Не знаю как заставить макрос запуститься в 10:00 и закончить работу в 19:00, а цикл архивирования данных происходил не чаще чем раз в 0,1с (т.е в часе 3600 с* 9ч итого 32 400, а с учетом десятых сек 324 000 записей исходных данных) Пока программа работает с запуском в ручную и кол-во записей опр переменной к, если ее значение больше значения N архивирование данных заканчивается, т.к комп тратит времени на выполнение одного цикла гораздо меньше времени чем 0,1с (10 000 циклов за 30с-1мин в зависимости от загруженности компа), получается многократная запись одних и тех же данных Пытался сделать паузу в цикле по средствам: Application.Time Now + TimeValue("00:00:00.1") Но макрос не понимает..... Подскажите как быть. Прилагаю пример, в архиве 2 файла в excwl 2010 и 97_2003 Вместе с данными ведется запись времени, на это не обращайте внимания, просто проверял сколько на выполнение тратится времени. Sub save_1() Dim t As Variant Dim d As Variant Dim i As Integer Dim j As Integer Dim k As Variant d = [F3] 'по столбцам k = [G3] Range("A24") = Time Range("A30") = Range("A24").Value 3: For j = 1 To 21 ' по столбцу запись информации Cells(40 + j + d, 1) = Cells(j, 1) Cells(40 + j + d, 2) = Cells(j, 2) Cells(40 + j + d, 3) = Cells(j, 3) Cells(40 + j + d, 4) = Time 10: If k > 10 Then GoTo 1 Next j d = d + 22 ' по столбцам k = k + 1 Range("F3") = d Range("G3") = k '7: Application.Time Now + TimeValue("00:00:00.1") GoTo 3 1: Range("A25") = Time Range("A32") = Range("A25").Value End Sub Спасибо. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 13.04.2011
Сообщений: 58
|
![]()
Application.Wait Now() + TimeValue("00:00:01") - Делает паузу в 1 сек
Как это настроить для паузы в 0,1с , (ведь формат времени в EXCEL 00:00.0 есть) - пока не получается |
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 02.05.2010
Сообщений: 1,390
|
![]()
В раздел объялений:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) В процедуру sleep 100
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728 |
![]() |
![]() |
![]() |
#4 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
Application.Wait Now() + 1/24/36000 -это логично, но не работает
с таким обьявлением Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) Sleep 100 - работает
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 05.05.2011 в 01:31. |
![]() |
![]() |
![]() |
#5 | |
Пользователь
Регистрация: 13.04.2011
Сообщений: 58
|
![]() Цитата:
Либо на Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Либо на Call Sleep(100) 'Задержка Возможно что то не так делаю... Если кто может впишите это в текст моей программы(приведена в 1 посте темы) В программировании я пока новичок, есть сложности..... А вот примеры что на просторах интернета я нашел http://server2009.ucoz.ru/chtivo/Info3.htm#106 номер 106 и 108 и про API Sleep http://visual.2000.ru/develop/ms-vb/tips/9611.htm совет 61 |
|
![]() |
![]() |
![]() |
#6 |
Участник клуба
Регистрация: 02.05.2010
Сообщений: 1,390
|
![]()
Вместо строки
'7: Application.Time Now + TimeValue("00:00:00.1") напишите sleep 100
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728 |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 13.04.2011
Сообщений: 58
|
![]()
[QUOTE=IgorGO;792920]Application.Wait Now() + 1/24/36000 -это логично, но не работает
Application.Wait Now() + (TimeValue("00:00:10") / 10) - к примеру работает задержка 1с Application.Wait Now() + (TimeValue("00:00:01") / 10) - а вот так уже нет, тк данный формат имеет мин зн 1 с и зн 1с/10 похоже принимает раное нулю, т.е без задержки Возможно дело в формате представления данных (времени) - есть временной формат 00:00.0 - возможно это и есть десятые секунды, только вот как их вписать в макрос не знаю...... |
![]() |
![]() |
![]() |
#8 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub PauseExample() Dim t As Single t = Timer Sleep 100 MsgBox Timer - t End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#9 | |
Пользователь
Регистрация: 13.04.2011
Сообщений: 58
|
![]() Цитата:
1:Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ................... 2:sleep 100 ........... end sub Ругается Compile error: Only comments may appear after End sub, End function, or End property Ставлю 1 и 2 в комент - работает........ потому и спросил..... |
|
![]() |
![]() |
![]() |
#10 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
обьявление процедуры - это отдельная строка.
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) вынесите в начало модуля (из тела save_1)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать цикл | cargo29 | Мультимедиа в Delphi | 1 | 22.04.2011 13:24 |
Как сделать, чтобы открытый запрос автоматически закрылся через 10 сек | Vikylik | Microsoft Office Access | 2 | 20.11.2010 19:15 |
Как округлить милисекунды в кол-во сек и мили сек? | XerSon | Общие вопросы Delphi | 2 | 09.06.2010 10:26 |
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? | Anarki | Общие вопросы C/C++ | 3 | 13.11.2009 19:23 |
Нужно сделать изменение цвета надписи каждые 15 сек | Wildice | Microsoft Office Excel | 3 | 03.11.2009 12:20 |