Последовательный перенос диапазонов - VBA

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

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

Уважаемые профи подскажите с доработкой макроса идея есть но совсем все плохо у меня с диапазонами... Задача такая : нужно последовательно скопировать диапазоны(сначала зеленый, потом красный , потом оранжевый и тд) на другой лист(можно в этой же книге).Описываю свой сценарий: 0)из книги в которой макрос(основная) обращаюсь к книге в которой диапазоны(first) 1)ищу дату 2)определяю адрес ячейки c первой датой 3)копирую диапазон который под этой датой(до первой пустой строки- выделена желтым)- на лист2 4)перехожу ко второму диапазоны этой даты на лист3 5)перехожу к другой дате и тд. У меня получилось только найти адрес ячейки с первой датой когда пыталась работать с диапазоном то постоянно вывались ошибка application defined or object defined error вот такой макрос у меня получается:
Листинг программы
  1. Sub tt()
  2. Dim f As Range
  3. Dim x As String
  4. Dim dat1 As Date
  5. Dim sh As Worksheet
  6. Set sh = Sheets("Base")
  7. dat1 = Cells(1, 1)
  8. '0)из книги в которой макрос(основная) обращаюсь к книге в которой диапазоны(first)
  9. With Workbooks("first.xlsx").Sheets("Лист1")
  10. '1)ищу дату
  11. Set f = .Columns("A:A").Find(dat1, , xlValues, xlWhole)
  12. If f Is Nothing Then
  13. MsgBox "NO"
  14. Else
  15. End If
  16. '2)определяю адрес ячейки c первой датой
  17. x = f.Address
  18. '3)копирую диапазон который под этой датой(до первой пустой строки- выделена желтым) - здесь Cells(Rows.Count, "I").End(xlUp) выделяет весь имеющийся диапазон а нужно только тот который начинается со следующей строки после даты и до желтой строки. Здесь и пишет ошибку
  19. .Range(Range(x).Offset(1, 0), Cells(Rows.Count, "I").End(xlUp)).Copy
  20. End With
  21. End Sub
Заранее спасибо! с Диапазонами (особенно нахождение последних строк(ячеек)) беда - не тяну их)

Решение задачи: «Последовательный перенос диапазонов»

textual
Листинг программы
  1. Sub tt()
  2. Dim f  As Range
  3. 'Dim r As Range
  4. 'Dim g As Range
  5. 'Dim y As Range
  6. 'Dim x As String
  7. Dim dat1 As Date
  8. 'Dim sh As Worksheet
  9. 'Set sh = Sheets("Base")
  10. dat1 = Cells(1, 1)
  11. With Workbooks("first.xlsx").Sheets("Лист1")
  12. Set f = .Columns(1).Find(dat1, , xlValues, xlWhole)
  13. If f Is Nothing Then: MsgBox "NO": Exit Sub
  14. .Range(.Cells(f.Row + 1, "a"), .Cells(f.End(xlDown).Row, "I")).Copy
  15. End With
  16. End Sub

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


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

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

10   голосов , оценка 3.6 из 5

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

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

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