Зацикливание имен папок из файла Excel vba

#excel #vba

#excel #vba

Вопрос:

У меня есть код, который скопирует нужные файлы, которые я хочу, вот код

 Dim saveFolder As String
Dim fname As String

saveFolder = "C:Copied file"

folder = Workbooks("Macros.xlsb").Worksheets("folder").Range("A2")
FileName = Workbooks("Macros.xlsb").Worksheets("path").Range("B4")

Path = FileName amp; "" amp; folder amp; "Samples*.xlsx"
file = Dir(Path)

Workbooks.Open Path

Sheets("Accounts").copy
ActiveWorkbook.SaveAs saveFolder amp; "Accounts.xlsx", FileFormat:=51
Workbooks(file).Close

ActiveWorkbook.Close
  

это работает хорошо, но мне нужно вручную ввести имя папки в столбце ячейки. Но я нажимаю каждый раз после выполнения макроса только для 1 папки и так далее.

Я просто хочу знать, как это зациклить.

это будет мой рабочий лист (папка) для имен папок:

 FOLDER
45
118
180
290
  

Я хочу зациклить макрос для каждой ячейки. так что мне не нужно щелкать / редактировать значения одно за другим. потому что имена папок могут быть изменены мгновенно.

Комментарии:

1. Вы просто хотите скопировать файлы Excel из указанных папок в «C:Copied file» или вы хотите сделать что-нибудь еще?

2. @TanmayGawankar да, я просто хочу скопировать указанные папки в «C:Copied файл» 🙂

Ответ №1:

В рамках вашего вопроса, запрашивающего цикл, вы можете попробовать это …

 Dim saveFolder As String
Dim fname As String

Dim lastRow As Long
Dim i As Long

' Set this either statically or dynamically.
lastRow = 100
saveFolder = "C:Copied file"

' Start from where you want either statically or dynamically.
For i = 4 To lastRow
    folder = Workbooks("Macros.xlsb").Worksheets("folder").Range("A2")
    Filename = Workbooks("Macros.xlsb").Worksheets("path").Range("B" amp; i)

    Path = Filename amp; "" amp; folder amp; "Samples*.xlsx"
    file = Dir(Path)

    Workbooks.Open Path

    Sheets("Accounts").Copy
    ActiveWorkbook.SaveAs saveFolder amp; "Accounts.xlsx", FileFormat:=51
    Workbooks(file).Close
Next

ActiveWorkbook.Close
  

Ответ №2:

для простого копирования файлов из одного места в другое вам не нужно открывать и сохранять их в файле 🙂

Вы можете зацикливать имена папок от верхней строки до последней строки и обрабатывать папки одну за другой. Найдите последнюю строку по lastRow = wb.sheets("Folder").cells(wb.rows.count, 1).end(xlup).row

Теперь выполните цикл по имени папки с помощью цикла for for i=2 to lastRow

вы можете поместить свою папку внутри цикла, например

 for i=2 to lastRow
    folder = Workbooks("Macros.xlsb").Worksheets("folder").Range("A" amp; i)
    ...
    copy  operations and filter here
    ...
next i