Borrar el contenido de las celdas en VBA utilizando la referencia de la columna

Estoy tratando de conseguir que un trozo de código borre los datos de algunas celdas, utilizando las referencias de las columnas. Estoy usando el siguiente código:

Worksheets(sheetname).Range(.Cells(2, LastColData), .Cells(LastRowData, LastColData)).ClearContents

Para hacer esto, sin embargo, estoy recibiendo un error en la primera sección .Cells, ¿por qué es esto?

Solución

Puede acceder a toda la columna como un rango utilizando el objeto Worksheet.Columns

Algo así como

Worksheets(sheetname).Columns(1).ClearContents 

debería borrar el contenido de la columna A

También existe el objeto Worksheet.Rows si necesita hacer algo similar para las filas


El error que está recibiendo es probablemente debido a la falta de un bloque con.

Puede leer sobre los bloques with aquí: Ayuda de Microsoft

Comentarios (0)

Como mencionó Gary's Student, tendrías que eliminar el punto antes de Cells para que el código funcione como lo escribiste originalmente. No puedo estar seguro, ya que sólo incluiste la única línea de código, pero el error que obtuviste al eliminar los puntos podría tener algo que ver con la forma en que definiste tus variables.

He ejecutado tu línea de código con las variables definidas como enteros y ha funcionado:

Sub TestClearLastColumn()

    Dim LastColData As Long
        Set LastColData = Range("A1").End(xlToRight).Column

    Dim LastRowData As Long
        Set LastRowData = Range("A1").End(xlDown).Row

    Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).ClearContents

End Sub

No creo que una sentencia With sea apropiada para la línea de código que has compartido, pero si tuvieras que usar una, la With estaría al principio de la línea que define el objeto que estás manipulando. Aquí está tu código reescrito usando una declaración With innecesaria:

With Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData))
    .ClearContents
End With

Las sentencias With están diseñadas para ahorrarte el tener que volver a escribir el código y para hacer que tu código sea más fácil de leer. Son útiles y apropiadas si se hace más de una cosa con un objeto. Por ejemplo, si quiere convertir la columna en roja y añadirle un borde negro grueso, puede utilizar una sentencia With como ésta:

With Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData))
    .ClearContents
    .Interior.Color = vbRed
    .BorderAround Color:=vbBlack, Weight:=xlThick
End With

De lo contrario, tendría que declarar el rango para cada acción o propiedad, así:

    Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).ClearContents
    Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).Interior.Color = vbRed
    Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).BorderAround Color:=vbBlack, Weight:=xlThick

Espero que esto te dé una idea de por qué Gary's Student creía que el compilador podría estar esperando un With (aunque fuera inapropiado) y cómo y cuándo un With puede ser útil en tu código.

Comentarios (1)

Necesita una declaración Con antes de esto. O hacer el .Cells en Cells

Comentarios (1)