#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