2012-08-13 88 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