(Excel 2010) Я пытаюсь получить определенные строки из множества «целевых» книг в разных, но похожих папках. Я обнаружил, что могу извлекать эти данные, когда исходная («LM», рабочая книга, в которой выполняется код, и в которую я хочу извлечь данные) и целевые рабочие книги находятся в одной папке, не открывая целевую рабочую книгу. , но когда они находятся в разных местах (как это будет на практике), я получаю сообщение об ошибке «Нижний индекс вне диапазона» для
LM.Worksheets("Sheet1").Range("B" & i + 1 & ":G" & i + 1).Value = _
Workbooks(filename).Worksheets("Sheet1").Range("B6:G6").Value
линия. Я пытался:
Использование каждого варианта и комбинации имени пути, имени каталога и имени файла и т. д. в качестве аргумента для последних Workbooks(). У меня также был MsgBox для просмотра частей и полного имени пути и имени файла, которые не содержат ошибок.
Замена последних рабочих книг (имя файла) на переменную рабочей книги (давайте назовем ее Targ), например LM (которая отлично работает)
Изменение пути с помощью ChDir и ChDrive (и я подтвердил, что CurDir() на самом деле является целевым каталогом, когда он работает) и выполнение вышеуказанного
Использование ThisWorkbook вместо LM для вызова
В основном каждая перестановка вышеперечисленных идей
Вот урезанная (потому что там была конфиденциальная информация) версия кода (которая отлично работает, если я раскомментирую Workbooks.Open и Workbooks.Close, но мне нужен более эффективный метод, так как это загруженная сеть и люди находятся в этих файлах все время. Тот факт, что я могу сделать это, не открывая файлы, если они находятся в одной папке, говорит мне, что я что-то напутал...)
Sub Import()
Dim directory As String, fileName As String, LM As Workbook, i as Integer
Set LM = Workbooks("LM.xlsm")
i = 1
Dim DirArray As Variant
'this is the array that handles the variations on the path, doesn't seem to be the problem
DirArray = LM.Worksheets("Sheet2").Range("DirTable")
Do While i <= UBound(DirArray)
directory = DirArray(i, 1)
dirname = "C:\blahblahblah"
fileName = Dir(dirname & "*.xl??")
pathname = dirname & fileName
ChDir dirname
' Workbooks.Open (dirname & fileName)
LM.Worksheets("Sheet1").Range("B" & i + 1 & ":G" & i + 1).Value = _
Workbooks(filename).Worksheets("Sheet1").Range("B6:G6").Value
i = i + 1
' Workbooks(fileName).Close
Loop
End Sub
Если бы я только мог понять, что отличается, когда они находятся в одной папке! Навигация с ChDir и ChDrive, похоже, не приносит никакой пользы...
Inter = Workbooks(pathname).Worksheets("Metrics").Range("B6:G6").Value
LM.Worksheets("Sheet2").Range("B" & i + 1 & ":G" & i + 1).Value = Inter
Отладчик помечает первую строку, такое же сообщение об ошибке - person basaltanglia   schedule 27.05.2016Workbooks(filename)
когда вы это делаете, я думаю, вам нужен весь путь. - person findwindow   schedule 27.05.2016Workbooks(pathname), Workbooks(dirname & filename), Workbooks(dirname & "\" & filename)
И другие варианты. И когда у меня msgbox или отладчик возвращают переменные, все они выглядят так, как я и ожидал... - person basaltanglia   schedule 27.05.2016Workbooks(pathname & "\" & filename)
?debug.print
чтобы убедиться, что это правильно. - person findwindow   schedule 27.05.2016"\"
? Опять же, что говоритdebug.print
? Это правильно?? - person findwindow   schedule 27.05.2016