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?
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
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.