#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