12

所以我使用 for each 循环来遍历一堆行。我遇到了一个问题,我正在删除行并导致一行被跳过,所以我已经更改为 do while 循环。

我遇到的问题是试图获得一个“细胞”对象。之前我有:

For Each C In Worksheets("Blah").Range("A2:A" & lastRow).Cells

我可以做类似的事情

C.Offset(1, 0)
C.Value = "Troy"

等等我尝试使用:

C = Worksheets("Blah").Cells(iRow, 2)

但这只是给 C 单元格的值。我如何获得实际的单元格对象?

谢谢

4

2 回答 2

19

删除行时,最好从下往上进行。您的特殊问题是您需要 Set 关键字将 C 设置为范围对象,而不是“让” C 设置为范围值。Range 有一个默认属性 Value,当您省略一个属性时,该属性就是所使用的属性。因此,在分配对象变量时必须使用 Set。这是一个向后循环以删除行并分配对象变量的示例。

Sub DeleteRows()

    Dim i As Long
    Dim rRng As Range
    Dim rCell As Range

    Set rRng = Sheet1.Range("A1:A9")

    For i = rRng.Rows.Count To 1 Step -1
        Set rCell = rRng.Cells(i, 1)
        If rCell.Value Mod 2 = 1 Then
            rCell.EntireRow.Delete
        End If
    Next i

End Sub
于 2012-08-13T21:23:34.400 回答
1

要获取对象引用而不是值本身,您需要使用“设置”

Set C = Worksheets("Blah").Cells(iRow, 2)
于 2019-02-25T17:54:23.543 回答