Код VBA Excel несколько раз пропускает один раздел

#excel #vba

Вопрос:

Это мой очень простой код:

 Sub copyPaste()

' Copies data from A, pastes in E, for each "chunk" of rows

Dim Last As Integer
Dim emptyRow As Integer

With ActiveSheet

Last = Range("A7391").End(xlUp).Row
For emptyRow = Last To 2 Step 1

    If Not Cells(emptyRow, 1).Value = "" Then
        ActiveCell.Offset(1, 0).Select
        Selection.Copy Destination:=Cells(ActiveCell.Row, 5)
        Application.CutCopyMode = False
    End If
    
    Cells(ActiveCell.Row   20, ActiveCell.Column).Select

Next emptyRow
End With

End Sub
 

Я прочитал здесь все сопоставимые вопросы, но безрезультатно. Я изменил каждое значение в коде. Я удалил весь If раздел. Я удалил строку, которая начинается с Cells . Я просматривал код несчетное количество раз. Я добираюсь до "For emptyRow..." , а затем он переходит к End With . Раньше у меня его даже не было With/End With , и он сразу перескочил End Sub , но я прочитал, что должен его добавить, и попробовал это сделать. Я даже попытался выключить Excel и перезагрузить компьютер. Я читал , что не следует использовать .Select , но на самом деле мне нужно выбрать ячейку, чтобы скопировать ее. Амивронг?

У меня есть четыре файла, в которых мне нужно запустить этот код, и он работал с первым!! И теперь ничто не заставит его работать. Я вырываю свои волосы. Что я упускаю, пожалуйста?

Комментарии:

1. If Not IsEmpty(Cells(emptyRow, 1)) Then . «На самом деле мне нужно выбрать ячейку, чтобы скопировать ее». Нет, это неверно. Человеку не нужно Select Range знать, прежде чем обращаться .Copy к нему.

2. Что вы намерены Cells(ActiveCell.Row 20, ActiveCell.Column).Select предпринять ?

3. Стэкс! Вот оно что! Фу. Очень признателен.

4. БигБен, код выбирает первую ячейку в каждом блоке после пустой строки. И я действительно перешел на ваш гораздо более лаконичный код. Спасибо.

5. Стакс, ты удалил неправильный комментарий. Вы удалили свой ответ.

Ответ №1:

Шаг должен быть отрицательным, если вы отступаете назад через диапазон. Т. е. Шаг -1