Как вы можете запустить макрос Excel через задачу расписания - PullRequest
9 голосов
/ 18 января 2012

Мне нужно запустить макрос в электронной таблице Excel с помощью задачи расписания. Я определил работу следующим образом:

"C: \ Program Files \ Microsoft Office \ Office10 \ EXCEL.EXE" ""

Проблема в том, что при запуске задания Excel отображает всплывающее окно и спрашивает, хотим ли мы отключить / включить макросы, что блокирует выполнение задания.

Как запустить этот макрос без необходимости вручную включать макрос?

Ответы [ 5 ]

8 голосов
/ 18 января 2012

Напишите короткий vbscript, который запускает Excel, загружает вашу рабочую книгу и использует Application.Run для запуска макроса.Запустите запланированное задание VBScript.

Например: http://www.mrexcel.com/forum/showthread.php?t=302970

3 голосов
/ 13 июля 2013

Вы не указываете, какая версия 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 - это не то, что вы просили, но это следует учитывать.

Видя этот вопрос и играя с вышеизложенным, я могу придумать несколько идей, которые хочу попробовать сам!

0 голосов
/ 24 января 2015

Кроме того, я обнаружил, что было бы неплохо иметь

Application.DisplayAlerts = False

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

Или посмотрите обучающее видео: http://youtu.be/lFSgV2gym9g

0 голосов
/ 23 мая 2014

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

0 голосов
/ 18 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...