Вставить макрос в цикл - VBA

Узнай цену своей работы

Формулировка задачи:

Всем привет!подскажите как настроить цикл: задача такая: есть файлы которые выгружаются из программы(report1,3,4). нужно из них скопировать диапазон.макрос на копирование диапазона есть. нужно проверить если в ячейки А1 есть текст "Test1" то макрос копирует диапазон в файл report2 на лист test1(выполняется макрос копирования диапазона) и тд. Сначала я хотела решить вопрос путем открытия всех выгруженных файлов процедурой GetFolderPath потом получить весь список файлов по-очереди открывать их и проверять условие. Потом наткнулась на код обработки уже открытых файлов( т е файлы которые выгружаются report1, 3 ,4)я так поняла что он закрывает все открытые книги(report1,3,4 не нужны после копирования нужного диапазона:
Листинг программы
  1. For Each wb In Workbooks ' перебираем все открытые книги
  2. If wb.Windows(1).Visible = True And (Not wb Is ActiveWorkbook) Then
  3. ' закрываем с сохранением только изменённые файлы
  4. wb.Close (Not wb.Saved) ' ранее сохранённые файлы просто закрываются
  5. End If
  6. Next wb
теперь не получается совместить его с моим макросом на копирование диапазона(я его отдельным тхт файлом прикрепила.У меня получилось вот так(при срабатывании вообще ничего не происходит:
Листинг программы
  1. Sub testing()
  2. Application.ScreenUpdating = True
  3. Workbooks.Open Filename:="C:\Users\ÀëåêñГ*Г*äðГ*\Desktop\ÍîâГ*Гї ГЇГ*ГЇГЄГ*\Report2.xlsx"
  4. For Each wb In Workbooks ' перебор открытых книг
  5. If Cells(1, 1) = "test1" Then 'проверка текста в ячейке А1
  6. 'здесь уже начинается макрос на копирования диапазона:он копирует строки по числу и вставляет в report2 в первую пустую строку
  7. Dim Dat As Date, Dat1 As Date, I As Long, ilastrow As Long
  8. Dat = Date
  9. I = 14
  10. ilastrow = Cells.Find("*", [A1], SearchDirection:=xlPrevious).Offset(1, 0).Row
  11. With ActiveWorkbooks.Sheets(1)
  12. Do While IsDate(.Range("B" & I))
  13. Dat1 = .Range("B" & I)
  14. If Dat1 = Dat - 1 Then
  15. .Range("B" & I & ":G" & I).Copy
  16. Workbooks("Report2.xlsx").Sheets(test1).Range("A" & ilastrow).Select
  17. ActiveSheet.Paste
  18. ilastrow = ilastrow + 1
  19. End If
  20. I = I + 1
  21. Loop
  22. End With
  23. 'макрос копирования закончился
  24. wb.Close (Not wb.Saved) ' Г°Г*Г*ГҐГҐ ñîõðГ*Г*ВёГ*Г*ûå ГґГ*éëû ïðîñòî Г§Г*êðûâГ*ГѕГІГ±Гї
  25. End If
  26. If Cells(1, 1) = "test2" Then ' проверка второго условия
  27. 'начинается макрос на копирования диапазона:он копирует строки по числу и вставляет в report2 в первую пустую строку
  28. I = 14
  29. ilastrow = Cells.Find("*", [A1], SearchDirection:=xlPrevious).Offset(1, 0).Row
  30. With ActiveWorkbooks.Sheets(1)
  31. Do While IsDate(.Range("B" & I))
  32. Dat1 = .Range("B" & I)
  33. If Dat1 = Dat - 1 Then
  34. .Range("B" & I & ":G" & I).Copy
  35. Workbooks("Report2.xlsx").Sheets(test2).Range("A" & ilastrow).Select
  36. ActiveSheet.Paste
  37. ilastrow = ilastrow + 1
  38. End If
  39. I = I + 1
  40. Loop
  41. End With
  42. 'макрос закончился
  43. wb.Close (Not wb.Saved) ' ранее сохраненные файлы просто закрываюся
  44. End If
  45. If Cells("1,1") = "test3" Then
  46. Dat = Date
  47. I = 14
  48. ilastrow = Cells.Find("*", [A1], SearchDirection:=xlPrevious).Offset(1, 0).Row
  49. With ActiveWorkbooks.Sheets(1)
  50. Do While IsDate(.Range("B" & I))
  51. Dat1 = .Range("B" & I)
  52. If Dat1 = Dat - 1 Then
  53. .Range("B" & I & ":G" & I).Copy
  54. Workbooks("Report2.xlsx").Sheets(test3).Range("A" & ilastrow).Select
  55. ActiveSheet.Paste
  56. ilastrow = ilastrow + 1
  57. End If
  58. I = I + 1
  59. Loop
  60. End With
  61. wb.Close (Not wb.Saved) ' Г°Г*Г*ГҐГҐ ñîõðГ*Г*ВёГ*Г*ûå ГґГ*éëû ïðîñòî Г§Г*êðûâГ*ГѕГІГ±Гї
  62. End If
  63. If wb.Windows(1).Visible = True And (Not wb Is ActiveWorkbook) Then
  64. ' закрываем только измененые файлы
  65. End If
  66. Next wb
  67. Application.ScreenUpdating = False
  68. End Sub

Решение задачи: «Вставить макрос в цикл»

textual
Листинг программы
  1. Sub test()
  2. Dim Dat As Date, Dat1 As Date, I As Long, ilastrow As Long
  3. Dat = Date
  4. I = 14
  5. ilastrow = Cells.Find("*", [A1], SearchDirection:=xlPrevious).Offset(1, 0).Row
  6. With Workbooks("Report1.xlsx").Sheets(1)
  7.   Do While IsDate(.Range("B" & I))
  8.     Dat1 = .Range("B" & I)
  9.     If Dat1 = Dat - 1 Then
  10.       .Range("B" & I & ":G" & I).Copy
  11.       Workbooks("Report2.xlsm").Sheets(test1).Range("A" & ilastrow).Select
  12.       ActiveSheet.Paste
  13.       ilastrow = ilastrow + 1
  14.     End If
  15.     I = I + 1
  16.   Loop
  17. End With
  18. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут