2012-08-13 20 views
10

Así que estaba usando un para cada ciclo para pasar por un montón de filas. Me encontré con un problema donde estaba borrando filas y estaba causando que una fila se saltara, así que cambié a un ciclo do while.cómo obtener un objeto 'Celda' en excel VBA

El problema que estoy teniendo es tratar de obtener un objeto 'célula'. Antes, cuando yo tenía:

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

que podía hacer cosas como

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

Etc. He intentado utilizar:

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

pero eso sólo da C el valor de la celda. ¿Cómo obtengo el objeto celular real?

Gracias

Respuesta

14

Al eliminar filas, siempre es mejor ir de abajo hacia arriba. Su problema particular es que necesita la palabra clave Establecer para establecer C en el objeto de rango en lugar de "Dejar" C en el valor de rango. Los rangos tienen una propiedad predeterminada, Valor, y cuando se omite una propiedad que es la propiedad que se usa. Por esa razón, debe usar Set al asignar variables de objetos. Aquí hay un ejemplo de un bucle hacia atrás para eliminar filas y asignar una variable de objeto.

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

Gracias por los consejos. cuando agregué Set fijó todo. –

+1

+ 1 Bonita explicación. –

Cuestiones relacionadas