Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Выполнение макроса в опреденное время Добавлено: 21.04.07 18:36  

Автор вопроса:  DrugON | ICQ: nospam 
Можете меня винить и банить за повторный вопрос, но сайт вообще и форум в частности работают отвратительно! Поиск - это вообще что-то с чем-то, непонятно что он вообщи и где ищет.
В общем подобный вопрос я задавал уже, но реализовать так и не смог. Мне необходимо, чтобы макрос выполнялся в заданное мной время и потом каждые 2 часа. То есть первый запуск, допустим, в 16:10, а потом в 18:10, в 20:10 и т.д. Ну с повторами сам уж постараюсь разобраться. Как сделать, чтобы он выполнялся в заданное время - вот основной вопрос.
Заранее всем благодарен.

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #1
Добавлено: 21.04.07 19:19
____ Так, наверное, надо взять из 16:10 вычесть текущее время суток (скорректировать в положительную сторону на 24 часа) и "соорудить" таймер на это время, а уж потом переустанавливать его по два часа каждый раз.
____ Непонятна проблема.

Ответить

Номер ответа: 2
Автор ответа:
 DrugON



ICQ: nospam 

Вопросов: 10
Ответов: 53
 Профиль | | #2 Добавлено: 21.04.07 19:47
Проблема в реализации, если Вы недопоняли. "Можно вот так" или "можно вот эдак" - тут согласен, идей навыдумывать можно кучу. И таймер сооружен вроде бы. Но как сделать, чтобы при наступлении заданного времени запускалось выполнение макроса? Как ни пытался - не смог сделать. Наверное, неправильно делаю что-то...
Вот что я с помощью Божьей и не только соорудил:
Sub UpdateTime()
   ;Dim 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-сайт: www.genyaa.nm.ru
 Профиль | | #3
Добавлено: 21.04.07 20:50
Если вставить вот это в модуль книги:

Private Sub WorkBook_Open()
SetTimes
End Sub


А это в обычный модуль:

Sub SetTimes()
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, который открывал эту книгу, не прекращался (был непрерывно запущен в памяти компа) с момента открытия книги до 22:10.

А если я закрою Excel? Да и всякое может случиться - свет выключат, кошка кабель перегрызет... ;)
Огромное спасибо! Старт дан, сейчас сам помозгую как сделать.

Ответить

Номер ответа: 5
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #5
Добавлено: 21.04.07 22:38
А если я закрою Excel?

Метод OnTime работает только в текущем сеансе Excel. Чтобы сообщение было вне зависимости от работы Excel, нужно напрягать не Excel, а Планировщик заданий, например.

Ответить

Номер ответа: 6
Автор ответа:
 DrugON



ICQ: nospam 

Вопросов: 10
Ответов: 53
 Профиль | | #6 Добавлено: 21.04.07 22:50
Чтобы сообщение было вне зависимости от работы Excel, нужно напрягать не Excel, а Планировщик заданий, например.

Да тут дело-то не в сообщении. Сообщение - это просто для примера. Вообще по идее каждые 2 часа запускается макрос, который открывает книгу из сети, копирует ее на локальную машину, копирует с нее некоторые данные в еще одну книгу и закрывает ее. То есть именно Эксель нужен. Но его могут и закрыть. Понятно, что при закрытом Экселе выполняться ничего не будет. Но ведь если я просто перезапущу его, при открытии этой книги макрос будет продолжать выполняться каждые 2 часа, правильно? Это мне и нужно!
Еще раз огромное спасибище!!!

Ответить

Номер ответа: 7
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #7
Добавлено: 22.04.07 00:30
Вот што значит хорошо наехать.:)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам