Добрый день.
На одном из подключенных дисков на рабочем компе, диске S, имеется папка. В ней лежат файлы. Файлы представляют собой заполненные формы. Формы эти сделаны следующим образом: типовые, одна шапка, одно количество как колонок, так и столбцов; одно количество листов, листы имеют одинаковые названия; форма имеет внешние связи с рядом других файлов, которые обновляются в автоматическом режиме; документ защищен от несанкционированных изменений, т.е. внести какие-то изменения в заполненную форму не в моих полномочиях, разорвать связи или отменить обновление также не могу. Моя задача заключается в следующем: из каждого файла-формы мне нужно извлечь данные из ячеек Е2, Е5, Н8. Через Power Query я достаю список всех файлов в нужной мне папке (каждый день в папку могут добавляться новые файлы, за месяц всего где-то 50-60 файлов). Далее добавляю три столбца, в которых использую формулу:
Код |
---|
Function Get_Value_From_Close_Book(sWb As String, sShName As String, sAddress As String)
Dim vData, objCloseBook As Object
Set objCloseBook = GetObject(sWb)
'получаем значение
vData = objCloseBook.Sheets(sShName).Range(sAddress).Value
objCloseBook.Close False
'Возвращаем данные в ячейку с функцией
Get_Value_From_Close_Book = vData
End Function |
для извлечения данных из указанных трех ячеек из всех имеющихся файлов.
Макрос работает, данные подхватываются, но… при обработке каждой строки выпадает сообщение что-то типа «Невозможно обновить внешние связи. Продолжить или Редактировать». Мне приходится нажимать «Продолжить» до тех пор, пока Ексель не обработает все строки. При этом, если нажать «Обновить все данные», дабы проверить на наличие новых файлов, Ексель сначала выдает сообщение о невозможности обновления, вынуждает меня нажимать «Продолжить» Н-цать раз, а потом либо подвисает так, что даже через диспетчер задач нельзя закрыть документ, только перезагрузка, либо выбивает из программы и перезапускает её. Я так понимаю, проблема заключается именно в автоматическом обновлении связей в запароленном документе. Как это обойти не знаю. Может кто-то что-то посоветует или предложит какой другой вариант решения исходной задачи, пусть и более затратный по времени… Заранее благодарю!