首页 > 解决方案 > 循环工作一次,然后“运行时错误'424':需要对象”

问题描述

对编码非常陌生,而 VBA 是我第一次涉足该主题。在工作中接手一个项目,并想“嘿,也许我可以用宏来摆脱这个”。

需要遍历一列,如果 StatCell 不等于 DateCell,我希望它删除 StatCell 和右侧的三个单元格。在该行中重复,直到我们得到 StatCell=DateCell,然后向下移动到下一行并重复。

这是我到目前为止的代码:

Dim StatRange As Range
Dim StatCell As Range
Dim DateCell As Range
Set DateCell = Range("B1")
Set StatRange = Range("B4:B500")
    For Each StatCell In StatRange
    Do While StatCell.Value <> DateCell.Value
        Range(StatCell.Offset(0, 0), StatCell.Offset(0, 3)).Select
        Selection.Delete Shift:=xlToLeft
    Loop
Next StatCell

它起初工作,并按预期进行第一次删除,但只有一次。然后我在这一行得到错误 424: Do While StatCell.Value <> DateCell.Value

我刚刚删除了 StatCell 并将行移到了导致此错误的原因上吗?我该如何解决?

我有一种感觉,我的错误是基本且明显的,但正如我所说,我对编码很陌生,可能错过了很多基本课程。任何帮助表示赞赏!

标签: vbaexcelruntime-error

解决方案


如果您仍想遍历单元格,请将所有匹配范围添加到变量中,然后删除您存储的范围。这通常比一次删除一个处理更快。

Dim StatRange As Range, rgDelete As Range
Dim StatCell As Range
Dim DateCell As Range
Set DateCell = Range("B1")
Set StatRange = Range("B4:B500")

For Each StatCell In StatRange.Cells

    If StatCell.Value <> DateCell.Value Then
        If rgDelete Is Nothing Then
            Set rgDelete = StatCell
        Else
            Set rgDelete = Union(StatCell.Resize(, 4), rgDelete)
        End If
    End If

Next StatCell


If Not rgDelete Is Nothing Then rgDelete.Delete xlToLeft

推荐阅读