Я читаю из коллекции книг Excel, используя VBA (циклически просматривая файлы, собранные с помощью Dir
). Поскольку существует более 70 файлов (и их количество увеличивается), я предпочитаю не открывать файлы из соображений эффективности. Каждая исходная рабочая книга содержит следующую формулу в ячейке J11 для автоматического предоставления своего имени файла.
“=MID(CELL("filename"),SEARCH("[",CELL("filename"))+1,SEARCH(".xls",CELL("filename"))-SEARCH("[",CELL("filename"))-1)”
Однако для небольшого числа файлов я получаю одинаковое неверное значение из исходной ячейки J11, когда использую любой изследующие подходы (в обоих случаях я получаю одинаковое значение, возвращаемое для 3 из 70+ файлов).
1. ExecuteExcel4Macro
sourceCell = "J11"
workbookCell = "'" & filePath & "[" & fileName & "]" & sourceSheet & "'!" & Range(sourceCell).Range("A1").Address(, , xlR1C1)
getValue = ExecuteExcel4Macro(workbookCell)
2. Прямая ссылка
Range(targetCell).Select
Selection.Formula = "='" & filePath & "[" & fileName & "]" & sourceSheet & "'!" & Range(sourceCell).Range("A1").Address(, , xlR1C1)
Selection.Formula = Selection.Value
Но когда я открываю файлы явно, используя следующее:
Workbooks.Open fileName:=(filePath + fileName), UpdateLinks:=False
getValue = ActiveWorkbook.Sheets(sourceSheet).Range("J11").Value
Я получаю правильные значения во всех случаях. Конечно, я могу использовать переменную имени файла, которая содержит имя файла из цикла VBA, но я хотел бы понять, почему оба вышеупомянутых подхода несовместимы для группы файлов, а также дают одно и то же значение, когда значение неверно. Я полагаю, что это может быть связано с отметкой времени файла - например, файлы A09.xls и A10.xls были созданы в один и тот же день (путем открытия A08.xls и сохранения в качестве каждого нового экземпляра), но A09 был сохранен позже и возвращаетневерное значение "A10" в ячейке J11. Примечание: когда я открываю каждый файл непосредственно в Excel cel, J11 всегда показывает правильное имя файла.
Спасибо DOM