Вставить макрос в цикл - VBA
Формулировка задачи:
Всем привет!подскажите как настроить цикл: задача такая: есть файлы которые выгружаются из программы(report1,3,4). нужно из них скопировать диапазон.макрос на копирование диапазона есть. нужно проверить если в ячейки А1 есть текст "Test1" то макрос копирует диапазон в файл report2 на лист test1(выполняется макрос копирования диапазона) и тд. Сначала я хотела решить вопрос путем открытия всех выгруженных файлов процедурой GetFolderPath потом получить весь список файлов по-очереди открывать их и проверять условие. Потом наткнулась на код обработки уже открытых файлов( т е файлы которые выгружаются report1, 3 ,4)я так поняла что он закрывает все открытые книги(report1,3,4 не нужны после копирования нужного диапазона:
теперь не получается совместить его с моим макросом на копирование диапазона(я его отдельным тхт файлом прикрепила.У меня получилось вот так(при срабатывании вообще ничего не происходит:
Листинг программы
- For Each wb In Workbooks ' перебираем все открытые книги
- If wb.Windows(1).Visible = True And (Not wb Is ActiveWorkbook) Then
- ' закрываем с сохранением только изменённые файлы
- wb.Close (Not wb.Saved) ' ранее сохранённые файлы просто закрываются
- End If
- Next wb
Листинг программы
- Sub testing()
- Application.ScreenUpdating = True
- Workbooks.Open Filename:="C:\Users\ÀëåêñГ*Г*äðГ*\Desktop\ÍîâГ*Гї ГЇГ*ГЇГЄГ*\Report2.xlsx"
- For Each wb In Workbooks ' перебор открытых книг
- If Cells(1, 1) = "test1" Then 'проверка текста в ячейке А1
- 'здесь уже начинается макрос на копирования диапазона:он копирует строки по числу и вставляет в report2 в первую пустую строку
- Dim Dat As Date, Dat1 As Date, I As Long, ilastrow As Long
- Dat = Date
- I = 14
- ilastrow = Cells.Find("*", [A1], SearchDirection:=xlPrevious).Offset(1, 0).Row
- With ActiveWorkbooks.Sheets(1)
- Do While IsDate(.Range("B" & I))
- Dat1 = .Range("B" & I)
- If Dat1 = Dat - 1 Then
- .Range("B" & I & ":G" & I).Copy
- Workbooks("Report2.xlsx").Sheets(test1).Range("A" & ilastrow).Select
- ActiveSheet.Paste
- ilastrow = ilastrow + 1
- End If
- I = I + 1
- Loop
- End With
- 'макрос копирования закончился
- wb.Close (Not wb.Saved) ' Г°Г*Г*ГҐГҐ ñîõðГ*Г*ВёГ*Г*ûå ГґГ*éëû ïðîñòî Г§Г*êðûâГ*ГѕГІГ±Гї
- End If
- If Cells(1, 1) = "test2" Then ' проверка второго условия
- 'начинается макрос на копирования диапазона:он копирует строки по числу и вставляет в report2 в первую пустую строку
- I = 14
- ilastrow = Cells.Find("*", [A1], SearchDirection:=xlPrevious).Offset(1, 0).Row
- With ActiveWorkbooks.Sheets(1)
- Do While IsDate(.Range("B" & I))
- Dat1 = .Range("B" & I)
- If Dat1 = Dat - 1 Then
- .Range("B" & I & ":G" & I).Copy
- Workbooks("Report2.xlsx").Sheets(test2).Range("A" & ilastrow).Select
- ActiveSheet.Paste
- ilastrow = ilastrow + 1
- End If
- I = I + 1
- Loop
- End With
- 'макрос закончился
- wb.Close (Not wb.Saved) ' ранее сохраненные файлы просто закрываюся
- End If
- If Cells("1,1") = "test3" Then
- Dat = Date
- I = 14
- ilastrow = Cells.Find("*", [A1], SearchDirection:=xlPrevious).Offset(1, 0).Row
- With ActiveWorkbooks.Sheets(1)
- Do While IsDate(.Range("B" & I))
- Dat1 = .Range("B" & I)
- If Dat1 = Dat - 1 Then
- .Range("B" & I & ":G" & I).Copy
- Workbooks("Report2.xlsx").Sheets(test3).Range("A" & ilastrow).Select
- ActiveSheet.Paste
- ilastrow = ilastrow + 1
- End If
- I = I + 1
- Loop
- End With
- wb.Close (Not wb.Saved) ' Г°Г*Г*ГҐГҐ ñîõðГ*Г*ВёГ*Г*ûå ГґГ*éëû ïðîñòî Г§Г*êðûâГ*ГѕГІГ±Гї
- End If
- If wb.Windows(1).Visible = True And (Not wb Is ActiveWorkbook) Then
- ' закрываем только измененые файлы
- End If
- Next wb
- Application.ScreenUpdating = False
- End Sub
Решение задачи: «Вставить макрос в цикл»
textual
Листинг программы
- Sub test()
- Dim Dat As Date, Dat1 As Date, I As Long, ilastrow As Long
- Dat = Date
- I = 14
- ilastrow = Cells.Find("*", [A1], SearchDirection:=xlPrevious).Offset(1, 0).Row
- With Workbooks("Report1.xlsx").Sheets(1)
- Do While IsDate(.Range("B" & I))
- Dat1 = .Range("B" & I)
- If Dat1 = Dat - 1 Then
- .Range("B" & I & ":G" & I).Copy
- Workbooks("Report2.xlsm").Sheets(test1).Range("A" & ilastrow).Select
- ActiveSheet.Paste
- ilastrow = ilastrow + 1
- End If
- I = I + 1
- Loop
- End With
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д