Цитата:
Я так понимаю, что файл эксель может быть периодически открываться и закрываться для заполнения данных и это на работу макроса ни как не влияет? Насколько надежный способ?
В принципе, может влиять.
По правилам сначала нужно попытаться выполнить GetObject. А если получим ошибку (нет открытого Excel), то выполнить CreateObject.
С другой стороны, если открыть лишний экземпляр приложения, то тоже страшного ничего не должно быть.
Короче, хорошо бы погонять и перепроверить. Уверенного ответа нет.
Цитата:
Можно дополнить макрос чтобы он запускался по расписанию?
Можно добавить таймер, но я бы этого делать не стал.
У себя в похожей ситуации я использовал назначенные задания Windows. Добавил WSH скрипт, который запускается по заданию. А уже из скрипта открываю Visio и выполняю в нем макрос. У меня этот макрос сначала обновляет файл Visio по данным из БД, потом сохраняет документ в PDF на SharePoint. Работает уже больше года и вроде бы без претензий.
Промежуточный скрипт хорош еще и тем, что может выполнить дополнительные операции. Например, сделать копию файла - источника данных или что-то преобразовать...
Это я к тому, что можно скачать источник из удаленного хранилища на свою машину и запускать обновление по этой копии.
Выглядит он примерно так
Код:
Option Explicit
Dim vApp
Dim vDoc
Set vApp = WScript.CreateObject("Visio.Application")
Set vDoc = vApp.Documents.Open("D:\aaaa1.vsd")
Call vDoc.PDFs
vDoc.Close
Set vDoc = vApp.Documents.Open("D:\aaaa2.vsd")
Call vDoc.PDFs
vDoc.Close
vApp.Quit
В этом фрагменте обновляются и публикуются два файла Visio.
Вот прямо этот код сидит в файле .vbs и запускается по расписанию.