Как вы можете запустить макрос 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.

Вы также можете использовать книгу открыть и вызвать макрос. Просто по расписанию откройте рабочую книгу, и макрос будет запущен при открытии рабочей книги.

Другие вопросы по тегам