Как вы можете запустить макрос Excel через задачу расписания
Мне нужно запустить макрос в электронной таблице Excel с помощью задачи расписания. Я определил работу, как показано ниже:
"C: \ Program Files \ Microsoft Office \ Office10 \ EXCEL.EXE" ""
Проблема в том, что при запуске задания Excel отображает всплывающее окно и спрашивает, хотим ли мы отключить / включить макросы, что блокирует выполнение задания.
Как я могу запустить этот макрос без необходимости вручную включать макрос?
5 ответов
Напишите короткий vbscript, который запускает Excel, загружает вашу рабочую книгу и использует Application.Run для запуска макроса. Запустите запланированное задание vbscript.
Например: http://www.mrexcel.com/forum/showthread.php?t=302970
Вы не указываете, какая версия Excel или какая версия Windows (или Macintosh), поэтому я укажу, что я использую Excel 2010 из Office 32-bit на Windows 7 Ultimate 64-bit...
Если вы хотите оставить свою книгу открытой и запустить код в указанное время, попробуйте это..
Вставьте новый модуль кода в ваш проект или используйте тот, который уже есть в вашем проекте.
Создайте подпрограмму планировщика, как показано ниже:
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 часов вы сможете запустить саб. IE Application.OnTime Now + TimeValue("05:00:00"), "TheScheduledSub"
или может быть через день? Поиграй с этим.
Я получил две подводные лодки для выполнения в разное время. Я также пытался выполнить два одновременно. Мой опыт работы с двумя различными подпрограммами, выполняющимися одновременно, заключался в том, что вторая подпрограмма, казалось, выполнялась до первой, но я не полностью изучил ее. Итак, YMMV.
Я не думаю, что Excel VBA поддерживает многопоточность, так что имейте это в виду. Я использую 32-разрядную версию Excel 2010 из пакета Office. Не уверен, как ведет себя 64-битный Office Excel или, в этом отношении, любая другая версия или платформа. В любом случае, многопоточность / многозадачность Excel VBA - это не то, что вы просили, но это следует учитывать.
Видя этот вопрос и играя с вышеизложенным, я могу придумать несколько идей, которые хочу попробовать сам!
Кроме того, я обнаружил, что это хорошая идея иметь
Application.DisplayAlerts = False
в начале, чтобы отключить любое всплывающее сообщение, которое может прервать ваш макрос при запуске.
Или посмотрите обучающее видео: http://youtu.be/lFSgV2gym9g
Вы можете попытаться снизить уровень безопасности Excel, чтобы избежать этого при запуске Excel.
Вы также можете использовать книгу открыть и вызвать макрос. Просто по расписанию откройте рабочую книгу, и макрос будет запущен при открытии рабочей книги.