Страницы: 1
RSS
Запуск макроса по таймеру
 
Добрый день.
Вопрос следующий... В таблицу excel постоянно выгружаются данные из сторонней программы, в день порядка 60 000 строк.
Требуется постоянно мониторить последние данные по выгрузке, использую следующий код ручным запуском (т.е. макрос запускаю кнопкой).

Код
Sub Proc()
   Range("A" & Rows.Count).End(xlUp).Offset(1).Select
End Sub

Подскажите пожалуйста, возможно автоматизировать запуск данного кода по таймеру (например: раз в секунду)?
Ну, или еще как вариант: при заполнении данных из выгрузки в ячейку (например, при заполнении последней пустой ячейки определенного столбца)?
Заранее спасибо за помощь!
Изменено: radonic - 27.02.2017 19:08:21
 
Читайте справку по ontime.
Я сам - дурнее всякого примера! ...
 
Спасибо за развернутый ответ, добрый человек, kuklp.

 
Здесь
Запуск макроса при изменении ячейки (привяжите к своей последней)
 
_Igor_61, спасибо, да макрос работает но, только при внесении данных в таблицу вручную. При выгрузке из сторонней программы к сожалению не работает (курсор не переходит на новую пустую ячейку).
Подскажите, где поправить?

Worksheet

Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("H:H")) Is Nothing Then
Call Proc
End If
End Sub

Module1

Код
Sub Proc()
   Range("A" & Rows.Count).End(xlUp).Offset(1).Select
End Sub
Изменено: radonic - 27.02.2017 21:27:37
 
radonic,
Всеж зависит от задачи и процесса, можно например по мобытию Calculate или Change запускать эту процедуру. То есть после изменения данных сраотает то что вам надо. Нет изменений вам и не надо. Контроль этого,
Цитата
radonic написал:
(например, при заполнении последней пустой ячейки определенного столбца)
тоже можно сделать, но нужно где то хранить адрес последней ячейки (строки) для сравнения при изменении.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
ожно например по мобытию Calculate или Change запускать эту процедуру
При получении данных по DDE события change не возникает, а calculate возникнет только, если к этим данным привязана формула, например counta, или summ.
Я сам - дурнее всякого примера! ...
 
Цитата
kuklp написал:
а calculate возникнет только, если к этим данным привязана формула, например counta, или summ.
ну мы то знаем, как это привязать :-)
По вопросам из тем форума, личку не читаю.
 
Ребята, поделитесь опытом, пожалуйста, а то ТС у меня спрашивает (#5), а я в макросах не силен  :) Как я понимаю, нужно в какую-то ячейку вставить формулу, чтобы она считала, например, сумму в столбце с выгружаемыми данными, и как только эта сумма в процессе выгрузки будет меняться, будет работать calculate ?
 
   radonic, посмотрите здесь, возможно это то что Вам нужно
 
radonic, может так?
Код
Sub Proc()
    Range("A" & Rows.Count).End(xlUp).Offset(1).Select
    Application.OnTime Now + TimeValue("00:00:05"), "Proc"
End Sub
Private Sub Workbook_Open()
    Proc
End Sub
 
_Igor_61, да.
Я сам - дурнее всякого примера! ...
 
kuklp, спасибо, я предполагал, что на верном пути!  :)
Осталось дождаться примера от ТС, чтоб увидеть как (где) и в каком формате получается выгрузка, чтобы правильно привязать формулу.
Хотя, может, ему уже удалось решить этот вопрос с помощью OnTime Now + TimeValue. Я вчера пробовал несколько подобных в #11 вариантов, но у меня макрос срабатывал только один единственный раз, при открытии книги, а чтобы он запускался через указанный промежуток времени так и не получилось, наверное, это тоже нужно вешать не на открытие книги, а на другое событие?
 
_Igor_61, а вот так?
Код
Sub FreqStart()
Dim i, frequency
frequency = 1000
Do
  If i < frequency Then i = i + 1 Else i = 0
  If i = 0 Then ProcedureTest
  DoEvents
Loop
End Sub
 
AAF
на сколько я помню, то при таком раскладе надо клавиатурку и мышку отключить :-) , дабы  DoEvents не оборвать. А в целом, зачем процессор греть?
Изменено: БМВ - 28.02.2017 15:28:48
По вопросам из тем форума, личку не читаю.
 
Цитата
AAF написал:
а вот так?
Если бесполезного поедания ресурсов процессора не жалко :) Посмотрите на загрузку ядра во время выполнения.AAF, Вам Игорь пишет:
Цитата
_Igor_61 написал:
Осталось дождаться примера от ТС
Вы не реагируете((
Я сам - дурнее всякого примера! ...
 
AAF, спасибо огромное, Ваш код работает! :)

Код
Sub Proc()    Range("A" & Rows.Count).End(xlUp).Offset(1).Select
    Application.OnTime Now + TimeValue("00:00:05"), "Proc"
End Sub
Private Sub Workbook_Open()
    Proc
End Sub

Всем спасибо за участие и потраченное время!
Страницы: 1
Наверх