Обновить документ Excel, не открывая его [дубликат]

0

У меня есть электронная таблица, которую я хочу загрузить в интранет моей компании, чтобы другие могли ее просмотреть. Каждый раз, когда электронная таблица открывается, она запускает фоновый скрипт, который обновляет информацию. Проблема в том, что скрипт выполняется около 10 минут, потому что он смотрит на 2 огромных таблицы.
Есть ли способ обновлять таблицу один раз в день (пример 2 часа ночи), не открывая ее?

Лиза
источник
Это зависит от того, как вы делитесь документом. На файловом сервере? В Sharepoint? Мы решаем это с помощью баз данных SQL, где мы можем решить, как часто происходит синхронизация.
Дараос
Не ответ, но: похоже, вы действительно попали в ограничения Excel. Может быть, вам нужно написать (написать) «настоящую» программу, а не делать все внутри Excel? Код, который запускает Excel (вероятно, VB), может быть извлечен в отдельную программу.
Слеск

Ответы:

1

Простой ответ: нет. Макрос 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, а затем закрывает оба файла.

LPChip
источник
0

Я думаю, что это может быть возможно с помощью Application.OnTime .

Таким образом, когда лист Excel открывается пользователем, добавьте следующее в существующий код

Public Sub ExecuteBigMacro()
    timeForAlert = Now + TimeValue("24:00:00")
    Application.OnTime timeForAlert, "ExecuteBigMacro"
    'the rest of your code which takes ages! 
End Sub

Это означает, что сначала открыть его в 2 часа ночи (и каждый раз после перезапуска приложения)! Хотя в зависимости от ситуации вы можете обновлять его каждые 4 часа и просто принимать в течение этого времени, для пользователя будет задержка !!

Дейв
источник