Страницы: 1
RSS
Выполнение процедур по таймеру
 
Доброго времени суток Всем.
Прошу направить в решении идеи. Суть ее заключается в том, чтобы выполнять ряд ghjwtleh по указанному времени. Задачу разбил на блоки.
1. Создал таблицу, в которой под нумерацию указал численное значение для задержки выполнения макроса.
2. Создал процедуру, в котором указываю, какой временной промежуток брать из таблицы 1
Public pNum As Long
Код
public pNum as Long 'Порядковый номер в таблице с нужным временем задержки
Sub listAnalisys()
    pNum = 1 'Порядковый номер в таблице с нужным временем задержки
    PtimerSchet ' Запуск таймера
    EffEng ' Выполнение нужной процедуры
    pNum = 2 'Порядковый номер в таблице с нужным временем задержки
    PtimerSchet ' Запуск таймера
    EffRus ' Выполнение нужной процедуры
    pNum = 3 'Порядковый номер в таблице с нужным временем задержки
    PtimerSchet ' Запуск таймера
    EffAll ' Выполнение нужной процедуры
    pNum = 4 'Порядковый номер в таблице с нужным временем задержки
    PtimerSchet ' Запуск таймера
    Total ' Выполнение нужной процедуры
End Sub
3. Создал таймер, который должен через массив находить время задержки кода, и выполнять код
Код
Public pTime As Date
Sub PtimerSchet() 'Таймер
    Dim mA()
    mA = Лист5.Range("A2:B51").Value 'таблица с указанием номера и времени задержки срабатывания процедуры
    For i = 1 To 52  
        If mA(i, 1) = pNum Then 'Перебираем массив чтобы найти нужное время задержки 
            pTime = TimeValue("0:00:0" & mA(i, 2)) 
            schetchik
            Exit For
        End If
    Next i
End Sub
'------------------------------------------------------------------------
Sub schetchik()
Application.ScreenUpdating = False
        pTime = pTime - TimeValue("0:00:01")
   If pTime > 0 Then 
        Application.OnTime Now + TimeValue("00:00:01"), "schetchik" ' Выполняем перезапуск процедуры с задержкой в 1 сек
    Else
        Application.ScreenUpdating = True
        Exit Sub 'В момент когда pTime будет равен 0, завершаем процедуру
    End If
End Sub

Но нужного результата никак не могу достигнуть, задержки не происходит во время выполнения кода. Укажите пожалуйста направление. Заранее благодарю за помощь
 
DSH, здравствуйте.
У меня срабатывает задержка в 1 сек.
Для чего вообще там Application.ScreenUpdating = False ?
И судя по этой строке
Код
Application.OnTime Now + TimeValue("00:00:01") 
у вас задержка всегда будет в 1 сек.
Или я что-то не понимаю в коде?
Цитата
создал таймер, который должен через массив находить время задержки кода
В общем, переформулируйте вопрос и приложите файл-пример с этим диапазоном.
 
Не совсем понял весь замысел.
Для паузы можно использовать Wait
П.С.
Application.OnTime просто запускает указанную процедуру в указанное время. Не перезапускает, как вы написали. Текущая процедура исполняется полностью, поэтому нет паузы.
Изменено: Dima S - 31.10.2016 21:15:13
 
Приветствую всех. Вчера сидел пробовал разного варианты и нашел выход.
Как указал Dima S,  нужно было использовать WAIT чтобы сделать паузу.

Цель была сделать код, который будет выполнятся автоматически и поэтапно, с указанным мною интервалом времени. Что то вроде поэтапного решения задачи, по пунктно. a+b=c. Просмотрел значение, далее с+d=f. Просмотрел результаты и т.д.
Код
Sub PtimerSchet()
    Dim mA()
    mA = Лист5.Range("A2:B51").Value
    For i = 1 To 52
        If mA(i, 1) = pNum Then
            pTime = TimeValue("0:00:0" & mA(i, 2))
            DoEvents
             Application.Wait Now + pTime ' ЗАМЕНИЛ НА WAIT И ДОСТИГ НУЖНОГО МНЕ РЕЗУЛЬТАТА
            Exit For
        End If
    Next i
End Sub
Спасибо за помощь Всем!
 
Цитата
DSH написал:
Просмотрел значение, далее с+d=f. Просмотрел результаты и т.д.
А можно выводить нужные данные для просмотра в MsgBox - тогда и тайм-аут не нужно устанавливать ))
Но придётся по кнопке кликать...
Страницы: 1
Наверх