iFolder$ = ThisWorkbook.Path & "\" 'для примера
Dim iCell As Range
For Each iCell In Лист1.Range(Лист1.[D5], Лист1.[D65536].End(xlUp))
iFileName$ = iFolder$ & CStr(iCell)
If Dir(iFileName$) <> "" Then
With Workbooks.Open(FileName:=iFileName$, UpdateLinks:=0)
'что-то там делаем, копируем, вставляем и т.д.
.Close saveChanges = False
End With
End If
Next
Цикл работает только для i=1
Прошу помочь разобраться, почему некорректно работает макрос.
Задача - открыть по очереди все файлы (Excel) в заданной директории и обработать информацию. В текущем файле есть перечень имен файлов.
For i = 1 To K 'всего надо обработать К файлов
Opros = Cells(i + 4, 4).Value 'ссылка на таблицу имен файлов (опросники)
Workbooks.Open Filename:= _
Fold & Opros
'открываем очередной файл с опросником
что-то там делаем, копируем, вставляем и т.д.
закрываем файл без сохранения
Windows(Opros).Close SaveChanges = False
Next i
Цикл работает только для i=1. Для i=2 VB видит значение следующей ячейки с именем Cells(i + 4, 4).Value, но не присваивает его переменной Opros, говорит, что значение Empty.
Если задать цикл i=2 to K, то такая же ситуация, только VB видит значение только второго файла (второй ячейки Cells(6, 4)), а для третьего нет.
В чем ошибка? Благодарю заранее за ответ.
Активный_лист.Ячейка(D5)
Первый_открытый_файл.Активный_лист.Ячейка(D6)
Второй_открытый_файл.Активный_лист.Ячейка(D7)
и т.д.
P.S. Перебрать весь список можно ещё и так (обратите внимание на то, что в нижеопубликованном примере использутся кодовое, иначе называемое, программное имя рабочего листа, которое может и не совпадать с именем листе в семействе)
Код:
Действительно, активация листа помогла:)
А если первоначальный пример не подошёл из-за того, что там перебирается весь список, а Вам нужно обрабатывать лишь указанное количество рабочих книг, то :
Код:
iCount& = 4
iFolder$ = ThisWorkbook.Path & "\" 'для примера
Dim iCell As Range
For Each iCell In ThisWorkbook.ActiveSheet.[D5].Resize(iCount&)
iFileName$ = iFolder$ & CStr(iCell)
If Dir(iFileName$) <> "" Then
With Workbooks.Open(FileName:=iFileName$, UpdateLinks:=0)
'что-то там делаем, копируем, вставляем и т.д.
.Close saveChanges = False
End With
End If
Next
iFolder$ = ThisWorkbook.Path & "\" 'для примера
Dim iCell As Range
For Each iCell In ThisWorkbook.ActiveSheet.[D5].Resize(iCount&)
iFileName$ = iFolder$ & CStr(iCell)
If Dir(iFileName$) <> "" Then
With Workbooks.Open(FileName:=iFileName$, UpdateLinks:=0)
'что-то там делаем, копируем, вставляем и т.д.
.Close saveChanges = False
End With
End If
Next
ThisWorkbook / ActiveWorkbook