做循环不停止

时间:2018-02-17 05:22:46

标签: excel excel-vba loops vba

我创建了这个宏来删除0Column 5值的行,从Row6开始。它应该在Column 2上有一个空单元格的行上停止。 我的数据仅包含600 rows。但是,在Row 20左右后,电子表格一直在等待,我需要按Esc键才能停止它。当它停止时,它位于最后一行,但它不会执行到sum column 4的最后一部分。

如果我再次按下宏,它可以正常使用新数据,并在column 4中添加总和。 (顺便说一句,这是我在Excel中的第一个宏)。

Sub DeleteRows()
'
' DeleteRows Macro
' Keyboard Shortcut: Ctrl+d
'

    Cells(6, 5).Select
    Do While (Cells(ActiveCell.Row, 2) <> "")
        Do While (Cells(ActiveCell.Row, 5) = 0)
            Rows(ActiveCell.Row).Select
            Selection.Delete Shift:=xlUp
        Loop
        Cells(ActiveCell.Row + 1, 5).Select
    Loop

    Cells(ActiveCell.Row, 4).Select
    Dim cel1 As String, cel2 As String
    cel1 = ActiveCell.Offset(-1, 0).End(xlUp).Address
    cel2 = ActiveCell.Offset(-1).Address
    ActiveCell.Value = "=sum(" & (cel1) & ":" & (cel2) & ")"

End Sub

1 个答案:

答案 0 :(得分:1)

删除行时从下往上循环,否则可能会跳过行。

sub deleteRows()
    dim i as long
    with worksheets("Sheet1")
        for i=.cells(.rows.count, "B").end(xlup).row to 6 step -1
            if .cells(i, "E").value2 =0 then
                .cells(i, "E").entirerow.delete
            end if
        next i
        with .cells(.rows.count, "D").end(xlup)
            .offset(1, 0).formula = "=sum(" & .parent.range(.cells(1), .cells(1).end(xlup)).address & ")"
        end with
    end with

end sub
  1. 缩进代码。
  2. How to avoid using Select in Excel VBA
  3. 为所有单元格和范围调用定义父工作表参考。