2012-08-13 32 views
10

所以我使用了每个循环来处理一堆行。我遇到了一个问题,我删除了行,导致一行被跳过,所以我改变了做while while循环。如何在excel中获得'Cell'对象VBA

我遇到的问题是试图获得一个'细胞'对象。以前当我有:

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中的单元格的值。我如何获得实际的细胞对象?

谢谢

回答

14

当你删除行时,总是最好从下往上。你特别的问题是你需要使用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 
+0

感谢您的提示。当我添加设置它修复了一切。 – 2012-08-13 21:28:54

+1

+ 1很好的解释。 – 2012-08-13 21:47:49