На этот вопрос уже есть ответ здесь:
У меня есть электронная таблица, которую я хочу загрузить в интранет моей компании, чтобы другие могли ее просмотреть. Каждый раз, когда электронная таблица открывается, она запускает фоновый скрипт, который обновляет информацию. Проблема в том, что скрипт выполняется около 10 минут, потому что он смотрит на 2 огромных таблицы.
Есть ли способ обновлять таблицу один раз в день (пример 2 часа ночи), не открывая ее?
Ответы:
Простой ответ: нет. Макрос VBA запускается на движке Microsoft Excel, то есть для работы макроса Excel должен быть открыт.
Однако VBScript - это тот же язык, что и VBA, за исключением того, что VBA может напрямую связываться с файлом Microsoft Excel и получать доступ к ячейкам с помощью таких команд, как sheet (1) .cells (1,3), где VBScript не может. Приложив много усилий, вы можете создать vbscript, который читает и создает файлы .csv, что в перспективе может дать вам идею замены.
Если это действительно не вариант (и, честно говоря, я не виню вас), вы можете отключить скрипт для загрузки каждый раз, когда кто-то открывает его, и вместо этого сделать его ручным заданием, чтобы по крайней мере передать контроль когда вам. Если на компьютере, работающем ночью, работает Microsoft Excel (может быть даже сервер), вы можете создать сценарий Auto-hotkey или, возможно, другой сценарий VBA, который будет запускать этот макрос и использовать запланированное задание для запуска Excel и открытия книги. , Обратите внимание, что запланированное задание само по себе не может запустить макрос, поэтому вам нужно упростить способ автоматического запуска макроса. Например, у вас есть workbook2.xls, в котором есть макрос, который автоматически открывает workbook1.xls, а затем запускает его расчетный макрос, а в конце сохраняет workbook1.xls, а затем закрывает оба файла.
источник
Я думаю, что это может быть возможно с помощью Application.OnTime .
Таким образом, когда лист Excel открывается пользователем, добавьте следующее в существующий код
Это означает, что сначала открыть его в 2 часа ночи (и каждый раз после перезапуска приложения)! Хотя в зависимости от ситуации вы можете обновлять его каждые 4 часа и просто принимать в течение этого времени, для пользователя будет задержка !!
источник