Страница: 1 |
Страница: 1 |
Вопрос: Выполнение макроса в опреденное время
Добавлено: 21.04.07 18:36
Автор вопроса: DrugON | ICQ: nospam
Можете меня винить и банить за повторный вопрос, но сайт вообще и форум в частности работают отвратительно! Поиск - это вообще что-то с чем-то, непонятно что он вообщи и где ищет.
В общем подобный вопрос я задавал уже, но реализовать так и не смог. Мне необходимо, чтобы макрос выполнялся в заданное мной время и потом каждые 2 часа. То есть первый запуск, допустим, в 16:10, а потом в 18:10, в 20:10 и т.д. Ну с повторами сам уж постараюсь разобраться. Как сделать, чтобы он выполнялся в заданное время - вот основной вопрос.
Заранее всем благодарен.
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #1
Добавлено: 21.04.07 19:19
____ Так, наверное, надо взять из 16:10 вычесть текущее время суток (скорректировать в положительную сторону на 24 часа) и "соорудить" таймер на это время, а уж потом переустанавливать его по два часа каждый раз.
____ Непонятна проблема.
Номер ответа: 2
Автор ответа:
DrugON
ICQ: nospam
Вопросов: 10
Ответов: 53
Профиль | | #2
Добавлено: 21.04.07 19:47
Проблема в реализации, если Вы недопоняли. "Можно вот так" или "можно вот эдак" - тут согласен, идей навыдумывать можно кучу. И таймер сооружен вроде бы. Но как сделать, чтобы при наступлении заданного времени запускалось выполнение макроса? Как ни пытался - не смог сделать. Наверное, неправильно делаю что-то...
Вот что я с помощью Божьей и не только соорудил:
 im varNextCall As Variant
' Записываем в ячейку текущее время
Set ws = ThisWorkbook.ActiveSheet
ws.Cells(1, 2).NumberFormat = "hh:mm"
ws.Cells(1, 2).Value = Now
If ws.Cells(1, 2).Value = CDate(Format("00:10", "HH:MM") Or ws.Cells(1, 2).Value = CDate(Format("02:10", "HH:MM") Or ws.Cells(1, 2).Value = CDate(Format("04:10", "HH:MM") Or ws.Cells(1, 2).Value = CDate(Format("06:10", "HH:MM") Or ws.Cells(1, 2).Value = CDate(Format("08:10", "HH:MM") Or ws.Cells(1, 2).Value = CDate(Format("10:10", "HH:MM") Or ws.Cells(1, 2).Value = CDate(Format("12:10", "HH:MM") Or ws.Cells(1, 2).Value = CDate(Format("14:10", "HH:MM") Or ws.Cells(1, 2).Value = CDate(Format("16:10", "HH:MM") Or ws.Cells(1, 2).Value = CDate(Format("18:10", "HH:MM") Or ws.Cells(1, 2).Value = CDate(Format("20:10", "HH:MM") Or ws.Cells(1, 2).Value = CDate(Format("22:10", "HH:MM") Then
MsgBox ("ПОРА!!!! СВОДКА!!!!"
End If
' Записываем в varNextCall время, когда вызывать этот макрос _
в следующий раз (через 1 секунду)
varNextCall = TimeSerial(Hour(Now), Minute(Now), Second(Now) + 60)
' Уведомляем Excel в необходимости вызова макроса
Application.OnTime varNextCall, "UpdateTime"
End Sub
То есть просто должно вылетать сообщение каждые 2 часа. Не вылетает. В чем я неправ?
Номер ответа: 3
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #3
Добавлено: 21.04.07 20:50
Если вставить вот это в модуль книги:
SetTimes
End Sub
А это в обычный модуль:
On Error Resume Next
For i = 16 to 22 Step 2
Application.OnTime TimeSerial(i,10,0), "m_MyProc"
next i
End Sub
Sub m_MyProc()
MsgBox "ПОРА! СВОДКА!"
End Sub
Сообщение будет безусловно появляться в 16:10, 18:10, 20:10, 22:10, если в течение текущих суток книга открывалась... главное чтобы процесс Excel, который открывал эту книгу, не прекращался (был непрерывно запущен в памяти компа) с момента открытия книги до 22:10.
Номер ответа: 4
Автор ответа:
DrugON
ICQ: nospam
Вопросов: 10
Ответов: 53
Профиль | | #4
Добавлено: 21.04.07 21:53
А если я закрою Excel? Да и всякое может случиться - свет выключат, кошка кабель перегрызет...
Огромное спасибо! Старт дан, сейчас сам помозгую как сделать.
Номер ответа: 5
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #5
Добавлено: 21.04.07 22:38
Метод OnTime работает только в текущем сеансе Excel. Чтобы сообщение было вне зависимости от работы Excel, нужно напрягать не Excel, а Планировщик заданий, например.
Номер ответа: 6
Автор ответа:
DrugON
ICQ: nospam
Вопросов: 10
Ответов: 53
Профиль | | #6
Добавлено: 21.04.07 22:50
Да тут дело-то не в сообщении. Сообщение - это просто для примера. Вообще по идее каждые 2 часа запускается макрос, который открывает книгу из сети, копирует ее на локальную машину, копирует с нее некоторые данные в еще одну книгу и закрывает ее. То есть именно Эксель нужен. Но его могут и закрыть. Понятно, что при закрытом Экселе выполняться ничего не будет. Но ведь если я просто перезапущу его, при открытии этой книги макрос будет продолжать выполняться каждые 2 часа, правильно? Это мне и нужно!
Еще раз огромное спасибище!!!
Номер ответа: 7
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #7
Добавлено: 22.04.07 00:30
Вот што значит хорошо наехать.