У меня есть named range
для списка файлов отчетов, которые я создал. Они хранятся в папке, которая соответствует имени их файла.
нравится - -
Список файлов - это Named Range
под названием order
а
б
c
и они хранятся в такой папке:
\ папка \ a \ a_support.xls
\ папка \ b \ b_support.xls
\ папка \ c \ c_support.xls
Я пытаюсь скопировать каждый файл xls в мастер-лист. Список не в алфавитном порядке, поэтому мне нужно просмотреть список и импортировать в том порядке, который у меня есть в настоящее время. Я попытался создать цикл, но не смог правильно указать свои именованные диапазоны или объекты.
Как мне сделать цикл, используя «i» для просмотра моего списка? Я буду использовать значение i для динамической ссылки на каталог.
вот мой код в его нынешнем виде
Sub Move_reports()
Dim day As String
Dim FromPath As String
Dim i As Long
Dim wsname As String
Dim order As Range
Dim c As Range
day = Sheets("data").Cells(1, 2).Value
FromPath = "\local\shared\"& day &"DOCUMENTS\" & i & "\"
Set c = Worksheets("data").Range(order) _
For Each c In order
If c.Value <> "" Then
wsname = c.Value
Workbooks.Open Filename:= _
FromPath & i & "_support.xls" _
, UpdateLinks:=0
Sheets(i).Select
Sheets(i).Copy After:=Workbooks("SEP_FINAL.xlsm").Sheets("BEG")
ActiveWindow.Close
SaveChanges = True
End If
Next
End Sub
У меня есть именованный список (называемый «порядок») и список имен каждого отчета. Все они сохраняются в виде файлов .xls в соответствующих папках по одному и тому же пути.
В Excel / VBA нет LIST
, вы имели в виду, что это range
вам не нужно использовать Select
при запуске кода VBA, Select
генерируется, когда вы записываете макрос, но практически в этом нет необходимости, поэтому вы можете удалить строки, в которых есть команда Select
хорошо, если у вас есть named range
с именем order
, чтобы прокручивать его сверху вниз, чтобы сохранить порядок открытия файлов, вы должны использовать что-то вроде этого в своем цикле:
Dim rng As Range
Set rng = Worksheets("Sheet1").Range("order").Columns(1) 'change the name of sheet per you need
For i = 1 To rng.Rows.Count
wsname = rng.Cells(i, 1)
Next i
предположение: вам не нужно сохранять имя и порядок файлов в named range
, потому что, если список увеличивается, вам также нужно изменить свой named range
. Вы можете легко подобрать названия любого числа из столбца листа. Допустим, вы сохраняете имена и порядок в столбце A листа Sheet1, поэтому сделайте следующее:
Dim rng As Range
Set rng = Worksheets("Sheet1").Range("A1").CurrentRegion.Columns(1)
For i = 1 To rng.Rows.Count
wsname = rng.Cells(i, 1)
Next i
не стесняйтесь ставить галочку и голосовать, если вас устраивает ответ :)
Спасибо за петлю! У меня почти все заработало, но значение "i" сохраняет возврат "0", а затем "1" Скриншот
Да! Я установил имя пути до того, как инициировать имя рабочего листа, поэтому цикл не начался, а значение wsname не было заполнено. Большое спасибо
Вот мой готовый рабочий код для тех, кто ищет тот же ответ, что и я
Еще раз спасибо Lbo!
все, что осталось, это 'IfError, next i'
Sub Move_reports()
Dim day As String
Dim FromPath As String
Dim i As Integer
Dim wsname As String
Dim rng As Range
day = Sheets("data").Cells(1, 2).Value _
Set rng = Worksheets("data").Range("A2").CurrentRegion.Columns(1)
For i = 2 To rng.Rows.Count
wsname = rng.Cells(i, 1)
FromPath = "\SUPPORT\" & day & "\DOCUMENTS\" & wsname & "\" _
Workbooks.Open Filename:= _
FromPath & wsname & "_support.xls" _
, UpdateLinks:=0
Sheets(wsname).Select
Sheets(wsname).Copy After:=Workbooks("SEP_FINAL.xlsm").Sheets("BEG")
ActiveWindow.Close
SaveChanges = True
Next i
End Sub
что вы имеете в виду под СПИСОК? где вы храните имена файлов xls?