Получите Excel, чтобы вставить всю строку в следующее доступное место на новом листе вместо того, чтобы перезаписывать уже имеющиеся данные - PullRequest
0 голосов
/ 28 января 2020

Я использую этот код для копирования / вставки всей строки, если столбец содержит ключевое слово. Я назначил макрос для кнопки. Это работает, но если я получаю новый элемент, помеченный как завершенный, и снова нажимаю кнопку, он стирает все данные на рабочем листе «Complete» и вставляет новую информацию. Я хочу, чтобы он вставлялся в последний ряд.

    Dim i As long
    Dim p As long
    Dim Source As Worksheet
    Dim Target As Worksheet

    Set Source = ActiveWorkbook.Worksheets("In Progress")
    Set Target = ActiveWorkbook.Worksheets("Complete")

    p = 3     ' Start copying to row 3 in target sheet
    Dim lastrow As Integer: lastrow = Source.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row

    For i = lastrow To 3 Step -1
        If Source.Range("B" & i).Value = "Complete" Then
        Source.Rows(i).Copy Target.Rows(p)
        Source.Rows(i).EntireRow.Delete
        p = p + 1
    End If
Next
End Sub

После поиска в Google, мне кажется, мне нужно что-то вроде

lastrow = Sheet2.Range("A99999").End(xlUp).Row + 1.

Я немного близок к тому, что Мне нужно это решить? Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 28 января 2020

Рабочая версия:

Sub TransferComplete()
    Dim i As long
    Dim p As long
    Dim Source As Worksheet
    Dim Target As Worksheet

    Set Source = ActiveWorkbook.Worksheets("In Progress")
    Set Target = ActiveWorkbook.Worksheets("Complete")

    p = Target.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row + 1    ' Start copying to last row in target sheet
    Dim lastrow As long: lastrow = Source.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row

    For i = lastrow To 3 Step -1
        If Source.Range("B" & i).Value = "Complete" Then
        Source.Rows(i).Copy Target.Rows(p)
        Source.Rows(i).EntireRow.Delete
        p = p + 1
    End If
Next
End Sub

Я удалил p = 3 и заменил его на p = Target.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row + 1

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