如何在Excel VBA中获取“Cell”对象

12

所以我使用了一个for each循环遍历一堆行。我遇到了一个问题,即删除行时会导致跳过一行,因此我改用了do while循环。

我遇到的问题是如何获取'cell'对象。以前我的代码是:

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 赋了单元格的值。我该如何获取实际的单元格对象?

谢谢

2个回答

19

删除行时,最好从底部开始删除。您的特定问题在于,您需要使用Set关键字将C设置为范围对象,而不是“Let” 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

谢谢你的建议。当我添加了“Set”时,一切都得到了解决。 - Troy Cosentino

1
要获取对象引用而不是值本身,您需要使用“Set”。
Set C = Worksheets("Blah").Cells(iRow, 2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接