Вы не указываете, какая версия Excel или какая версия Windows (или Macintosh), поэтому я укажу, что я использую Excel 2010 из 32-разрядной версии Office в 64-разрядной версии Windows 7 Ultimate ...
Если вы хотите оставить рабочую книгу открытой и запустить код в указанное время, затем попробуйте это ..
Вставьте новый модуль кода в ваш проект - или используйте тот, который у вас уже есть в вашем проекте.
Создайте подпрограмму планировщика, как показано ниже:
Sub Scheduler()
'-- RUNS SUB(S) (OR FUNCTIONS) AT TIME SCHEDULED.
Application.OnTime TimeValue("11:46:40"), "TheScheduledSub"
End Sub
Создайте подпрограмму (или функцию), которую вы хотите запустить. Вот один для этого примера:
Sub TheScheduledSub()
Debug.Print "TheScheduledSub() has run at " & Time
End Sub
Scheduler()
выполнит TheScheduledSub()
в точное время, указанное внутри Scheduler()
, определяемое TimeValue
. Вы можете прочитать больше о TimeValue
здесь .
Вы, вероятно, могли бы передать значение времени, в которое вы хотите, чтобы подпрограмма Scheduler () выполняла ваши подпрограмму (и) или функцию (и) в качестве параметра в подпрограмме.
Скорее всего, вы могли бы запустить менее 5 часов, скажем так. И.Е.
Application.OnTime Now + TimeValue ("05:00:00"), "TheScheduledSub"
или, может быть, через день? Поиграй с этим.
Я получил два саба для выполнения в разное время. Я также пытался выполнить два одновременно. Мой опыт работы с двумя различными подпрограммами, выполняющимися одновременно, заключался в том, что вторая подпрограмма, казалось, выполнялась до первой, но я не полностью изучил ее. Итак, YMMV.
Я не думаю, что Excel VBA поддерживает многопоточность, так что имейте это в виду. Я использую 32-разрядную версию Excel 2010 из пакета Office. Не уверен, как ведет себя 64-битный Office Excel или, в этом отношении, любая другая версия или платформа. В любом случае, многопоточность / многозадачность Excel VBA - это не то, что вы просили, но это следует учитывать.
Видя этот вопрос и играя с вышеизложенным, я могу придумать несколько идей, которые хочу попробовать сам!