Макрос для вырезания и вставки строки, основанной на содержимом ячеек, работает наполовину - ячейки вырезаются, но они не вставляются - PullRequest
0 голосов
/ 11 июля 2019

У меня есть запущенный макрос, который используется для вырезания и вставки содержимого строки на листе. Открытые действия, когда в столбце L содержится либо оператор Complete, либо оператор Held.

Оба эти двух утверждения определяют, на каком листе должна быть вырезана и вставлена ​​строка.

  • Если содержимое строки L заполнено, перейдите к Завершенным действиям
  • Если содержимое строки L задержано, перейдите к «Проведенные действия»

Содержимое таблицы не начинается до строки 6, так как есть заголовки и заголовки выше, то же самое для таблиц назначения.

Кажется, я не могу указать конкретную строку, в которую должны быть вставлены вырезанные и вставленные ячейки.

Это копия кода, который у меня есть:

Я пробовал несколько методов VBA и не могу найти тот, который работает.

Sub completeaction()

Set wsOne = ActiveWorkbook.Sheets("Open Actions")
Set wsTwo = ActiveWorkbook.Sheets("Completed Actions")
Set ws.Three = ActiveWorkbook.Sheets("Held Actions")

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

MsgBox lastRow

For i = 1 To lastRow
    lastOutRow = wsTwo.Cells(wsTwo.Rows.Count, 1).End(xlUp).Row + 1
        If wsOne.Range("L" & i).Value = "Complete" Or wsOne.Range("L" & i).Value = "Held" Then
            wsTwo.Rows(lastOutRow).Value = wsOne.Rows(i).Value
            wsOne.Rows(i).EntireRow.Delete
        End If
Next

End Sub

Желаемым результатом для этого макроса является то, что строки будут перемещаться на соответствующие рабочие листы в зависимости от того, что было указано в строке L

1 Ответ

0 голосов
/ 11 июля 2019

Несколько вещей.

  • Я думаю, вам нужно разделить ваш If, поскольку два разных условия должны приводить к разным результатам;следовательно, вам также нужна переменная, чтобы найти последнюю строку в каждом из двух листов

  • Привыкнуть к объявлению переменных (используйте Option Explicit)

  • Поскольку вы также удаляете строки, выполните цикл назад, чтобы избежать пропуска строк

    Sub completeaction()
    
    Dim wsOne As Worksheet 'etc
    Dim lastRowOne As Long 'etc
    
    Set wsOne = ActiveWorkbook.Sheets("Open Actions")
    Set wsTwo = ActiveWorkbook.Sheets("Completed Actions")
    Set wsThree = ActiveWorkbook.Sheets("Held Actions")
    
    lastRowOne = wsOne.Cells(wsOne.Rows.Count, 1).End(xlUp).Row
    lastrowtwo = wsTwo.Cells(wsTwo.Rows.Count, 1).End(xlUp).Row + 1
    lastrowthree = wsThree.Cells(wsThree.Rows.Count, 1).End(xlUp).Row + 1
    
    For i = lastRowOne To 1 Step -1
        If wsOne.Range("L" & i).Value = "Complete" Then
            wsTwo.Rows(lastrowtwo).Value = wsOne.Rows(i).Value
            wsOne.Rows(i).EntireRow.Delete
            lastrowtwo = lastrowtwo + 1
         ElseIf wsOne.Range("L" & i).Value = "Held" Then
            wsThree.Rows(lastrowthree).Value = wsOne.Rows(i).Value
            wsOne.Rows(i).EntireRow.Delete
            lastrowthree = lastrowthree + 1
        End If
    Next
    
    End Sub
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...