如何修复VBA For循环中的运行时错误

时间:2013-09-06 02:39:31

标签: excel vba excel-vba excel-2007

我正在执行以下代码,但是错误 - 运行时错误 - 6超过。

像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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我会尝试第一件事:

Dim I as Long