Тема такая, есть таблица (см. вложение), в которой находятся блоки идентичные друг другу через одинаковое друг от друга расстояние.
Написал макрос чтобы он копировал блок, в котором находится активная ячейка, со смещением вниз на 132 строки (не спрашвайте зачем 132, так надо просто).
Групп блоков всего 7 (поэтому и прописано соответствующее кол-во условий If). Суть в том, что макрос высчитывает активную ячейку, прибавляет к ней 132 и, если номер строки будет больше 920, макрос должен остановиться.
Ну так вот, макрос вроде делает все как надо, но я хотел бы добавить в него чтобы он возвращался в исходную ячейку (потому что можно запустить макрос не с 1 блока, а, допустим, с 7-8 итд), с которой начал. Ни как не соображу как это сделать.
Еще я хотел сделать цикл (чтобы макрос не был таким огромным), но не получилось что-то... Может есть у кого какие идеи?
Файл прикладываю.
А вот макрос:
Написал макрос чтобы он копировал блок, в котором находится активная ячейка, со смещением вниз на 132 строки (не спрашвайте зачем 132, так надо просто).
Групп блоков всего 7 (поэтому и прописано соответствующее кол-во условий If). Суть в том, что макрос высчитывает активную ячейку, прибавляет к ней 132 и, если номер строки будет больше 920, макрос должен остановиться.
Ну так вот, макрос вроде делает все как надо, но я хотел бы добавить в него чтобы он возвращался в исходную ячейку (потому что можно запустить макрос не с 1 блока, а, допустим, с 7-8 итд), с которой начал. Ни как не соображу как это сделать.
Еще я хотел сделать цикл (чтобы макрос не был таким огромным), но не получилось что-то... Может есть у кого какие идеи?
Файл прикладываю.
А вот макрос:
Код |
---|
'Этой функцией вычисляю в каком именованом диапазоне находится активная ячейка Function arnm(cell As Range) As String Dim x On Error Resume Next For Each x In Application.Names If Intersect(x.RefersToRange, cell) Is Nothing Then Else arnm = arnm & x.Name & " " End If Next arnm = Trim(arnm) End Function 'Здесь вычисляю активную ячейку Private Sub stat() Dim s s = arnm(Cells(ActiveCell.Row, ActiveCell.Column)) Range(s).Select End Sub 'Эта функция при нажатии на кнопку запускает макрос заполнения Private Sub cmbutton_Click() stat Selection.Copy acr = ActiveCell.Row + 132 'Здесь описываю что делать при ошибке On Error GoTo Err_Handler 'А тут начинается перечисление условий If acr < 920 Then ActiveCell.Offset(132, 0).Select stat ActiveSheet.Paste acr = ActiveCell.Row + 132 If acr < 920 Then ActiveCell.Offset(132, 0).Select stat ActiveSheet.Paste acr = ActiveCell.Row + 132 If acr < 920 Then ActiveCell.Offset(132, 0).Select stat ActiveSheet.Paste acr = ActiveCell.Row + 132 If acr < 920 Then ActiveCell.Offset(132, 0).Select stat ActiveSheet.Paste acr = ActiveCell.Row + 132 If acr < 920 Then ActiveCell.Offset(132, 0).Select stat ActiveSheet.Paste acr = ActiveCell.Row + 132 If acr < 920 Then ActiveCell.Offset(132, 0).Select stat ActiveSheet.Paste Application.CutCopyMode = False Else Application.CutCopyMode = False Cells(ActiveCell.Row, ActiveCell.Column).Select Exit Sub End If End If End If End If End If End If Err_Handler: Application.CutCopyMode = False Cells(ActiveCell.Row, ActiveCell.Column).Select Exit Sub Cells(ActiveCell.Row, ActiveCell.Column).Select End Sub |