макрос для дублирования строк ранее работал, теперь не работает, но нет сообщения об ошибке? - PullRequest
0 голосов
/ 05 февраля 2019

Я использую следующий макрос для дублирования информации из одной строки в пустую (которую я уже сгенерировал) ниже.Этот макрос работал ~ месяц назад, но когда я запускаю его сейчас, ничего не происходит, несмотря на отсутствие сообщения об ошибке.

Sub FillEveryOther()

Dim lastRow As Long
Dim i As Long

lastRow = Cells(Rows.Count, 12).End(xlUp).Row

For i = 2 To i = lastRow Step 2
        Rows(i).EntireRow.Select
        Selection.Copy
        Rows(i + 1).EntireRow.Select
        ActiveSheet.Paste
     If i = lastRow + 1 Then Stop
Next i

End Sub

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Заполните все остальные строки предыдущим

Код

Sub FillEveryOther()

    Const cCol As Variant = 12    ' Last-Row-Column Letter/Number
    Const cFirstRow As Long = 2   ' First Row Number

    Dim lastRow As Long   ' Last Row Number
    Dim i As Long         ' Cell (Row) Counter

    ' Calculate Last Row Number in Last-Row-Column.
    lastRow = Cells(Rows.Count, cCol).End(xlUp).Row

    ' Loop through every other cell (row) of Last-Row-Column.
    For i = cFirstRow To lastRow Step 2
        ' Copy current row to the row below.
        Rows(i).Copy Rows(i + 1)
    Next

End Sub

Улучшение?

Следующий код позволяет не ровно выравнивать строки (2,4, 6 ...) и ниже может быть несколько пустых строк.Но в ячейках cCol всегда должны быть данные или формула в них (IsEmpty).

Sub CopyNotEmpty()

    Const cCol As Variant = 12    ' Last-Row-Column Letter/Number
    Const cFirstRow As Long = 2   ' First Row Number

    Dim lastRow As Long   ' Last Row Number
    Dim i As Long         ' Cell (Row) Counter

    ' Calculate Last Row Number in Last-Row-Column.
    lastRow = Cells(Rows.Count, cCol).End(xlUp).Row

    ' Loop through cells (rows) of Last-Row-Column.
    For i = cFirstRow To lastRow
        ' Check if there is data in current cell.
        If Not IsEmpty(Cells(i, cCol)) Then
            ' Copy current row a row below.
            Rows(i).Copy Rows(i + 1)
            ' Increase Cell (Row) Counter, because we don't want to copy
            ' the already copied row.
            i = i + 1
        End If
    Next

End Sub
0 голосов
/ 05 февраля 2019

Вы никогда не входите в цикл из-за того, что

For i = 2 to i = lastRow Step 2

функционально совпадает с

For i = 2 to False Step 2

Поскольку False оценивается в 0, это действительно говорит

For i = 2 to 0 Step 2

и поэтому он никогда не входит в цикл.

Просто измените его на

For i = 2 To lastRow Step 2

РЕДАКТИРОВАТЬ:

Простодля ясности, независимо от того, оценивает ли оператор True или False, он все равно не войдет в цикл, поскольку False оценивает 0 и True оценивает -1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...