2013-09-06 17 views
0

Я выполняю следующий код, но получаю ошибка - ошибка выполнения - 6 overlfow.Как исправить ошибку времени выполнения в VBA For Loop

Швы, такие как rowcount, получают идеальное значение, я могу видеть, когда я перехожу в режим отладки. Но после этого ничего не происходит.

может решить, пожалуйста, для меня?

Private Sub CommandButton1_Click() 
     Dim i As Integer 
     Dim RowCount As Long 

     RowCount = Cells(Rows.Count, "A").End(xlUp).Row 

     For i = RowCount To 2 Step -1 
      If Cells(i, 4) = "7" Then 
       Rows(i).Delete Shift:=xlUp 
      End If 
     Next i 
    End Sub 
+3

Где происходит ошибка, и сколько строк вы перебор? Если более 32768, это будет проблемой. i является целым числом и не может содержать значения, превышающие это. Если это так, Dim i as Long и вам хорошо идти. –

ответ

0

Первое, что я хотел бы попробовать:

Dim I as Long 
+1

Вы правы, однако объяснение было бы хорошим;) –

2

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

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

Следующий код автофильтров Sheet1, находя любые ячейки в столбце D, равные 7. Он удаляет эти строки, а затем отключает автофильтр, оставляя нужные строки. Обратите внимание, что с помощью метода смещения вы не будете удалять строку 1, если она имеет в ней 7 или нет.

Добавьте этот код в модуль, и вызовите модуль из вашей кнопки-клик:

Sub DeleteRowsThatMatch() 
    Dim ws As Worksheet 
    Dim rng As Range 
    Dim lastRow As Long 
    Dim match As String 

    Set ws = ThisWorkbook.Sheets("Sheet1") 

    lastRow = ws.Range("D" & ws.Rows.Count).End(xlUp).Row 
    match = "7" 

    Set rng = ws.Range("D1:D" & lastRow) 

    ' filter and delete all but header row 
    With rng 
     .AutoFilter field:=1, Criteria1:="=" & match 
     .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
    End With 

    ' turn off the filters 
    ws.AutoFilterMode = False 
End Sub 
Смежные вопросы