Как скопировать строки из одного листа, а затем удалить их после перемещения? - PullRequest
0 голосов
/ 05 марта 2010

Как программно скопировать строки из одного листа с помощью VBA, а затем удалить их после перемещения? Кажется, я не удаляю все записи на основе критериев, я ищу.

Dim lRowCounter as Long, lTotalRows as Long,sCommPerUnit  as String,lExceptionRowCounter  as Long

lTotalRows = 10

For lRowCounter = 1 To lTotalRows

    'If Row has no mapping, move it to Exceptions Report
    sCommPerUnit = Trim(rRange.Offset(lRowCounter, 2))

    If (sCommPerUnit = "SOMETHING") Then

        lExceptionRowCounter = lExceptionRowCounter + 1
        'Move row to Exception Report Worksheet
        rExceptionRange.Offset(lExceptionRowCounter, 1) = Trim(rRange.Offset(lRowCounter, Output_Order))

        'Delete Row from Report
        rRange.Offset(lRowCounter, 1).EntireRow.Delete xlShiftUp
    End If
Next

привет

Коджо

Ответы [ 2 ]

2 голосов
/ 05 марта 2010

Вы удаляете первую строку, затем смещаетесь вверх, но увеличиваете до следующей строки.Значит, вы пропускаете ряд.Я всегда удаляю первый ряд и сдвигаюсь вверх.Затем в следующем цикле следующая строка снова будет первой.

    'If Row has no mapping, move it to Exceptions Report 
    sCommPerUnit = Trim(rRange.Offset(0, 2)) 

    ...

    'Move FIRST row to Exception Report Worksheet'S LAST ROW
    rExceptionRange.Offset(lExceptionRowCounter, 1) = Trim(rRange.Offset(0, Output_Order)) 

    'Delete FIRST Row from Report 
    rRange.Offset(0, 1).EntireRow.Delete xlShiftUp 
0 голосов
/ 06 марта 2010

При удалении строк в диапазоне почти всегда лучше начинать с последней строки и работать в обратном направлении. Это означает, что удаление строки ничего не меняет в строках, которые вам еще предстоит посмотреть

Dim lRowCounter as Long, lTotalRows as Long,sCommPerUnit  as String,lExceptionRowCounter  as Long

lTotalRows = 10

For lRowCounter = lTotalRows To 1 Step -1

    'If Row has no mapping, move it to Exceptions Report
    sCommPerUnit = Trim(rRange.Offset(lRowCounter, 2))

    If (sCommPerUnit = "SOMETHING") Then

        lExceptionRowCounter = lExceptionRowCounter + 1
        'Move row to Exception Report Worksheet
        rExceptionRange.Offset(lExceptionRowCounter, 1) = Trim(rRange.Offset(lRowCounter, Output_Order))

        'Delete Row from Report
        rRange.Offset(lRowCounter, 1).EntireRow.Delete xlShiftUp
    End If
Next lRowCounter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...