Saltar al contenido

Error al limpiar rango de celdas


Recommended Posts

publicado

Hola a todos. 

Perdonar con este asunto, creo que debe ser una tontería, pero no logro ver el error.

Con esta sentencia me da error:

Worksheets("KM_iniciales").Range(Cells(1, 1), Cells(maxrow, maxcolumn)).ClearContents

Y sin embargo así funciona.

Worksheets("KM_iniciales").Range("A1:K" & maxrow).ClearContents

Quisiera que la columna a eliminar no fuera siempre la K porque podría ser otra, por eso quiero hacerlo con cells, pero no logro que funcione. ¿Qué estoy poniendo mal?

Teniendo en cuenta que busca la última fila y columna así.

maxcolumn = Worksheets("KM_iniciales").Cells.SpecialCells(xlLastCell).Column
maxrow = Worksheets("KM_iniciales").Cells.SpecialCells(xlLastCell).Row

 

Gracias.

Moisés.

 

publicado

Seguro que hay celdas combinadas de por medio o un problema en el ámbito de las variables, pero como no has subido el archivo,......., prueba así:

Worksheets("KM_iniciales").Range(Cells(1, 1), Cells(maxrow, maxcolumn)).Value = ""

 

publicado
Private Function ClearDiarios()
   With Sheets("KM_diarios")
      maxcolumn = .Cells.SpecialCells(xlLastCell).Column
      maxrow = .Cells.SpecialCells(xlLastCell).Row
      .Range(.Cells(1, 1), .Cells(maxrow, maxcolumn)).ClearContents
   End With
End Function

 

publicado

@@Antoni

Ahora si funciona... Veo que en vez de worksheets usas:

With Sheets("KM_diarios")

¿Esa es la diferencia o no lo veo todavía? ¿Influye en algo? Para tenerlo en cuenta en el futuro.

Muchas gracias.

Moisés.

publicado

La diferencia está aquí:

.Range(.Cells(1, 1), .Cells(maxrow, maxcolumn)).ClearContents

esto equivale a:

Sheets("KM_diarios").Range(Sheets("KM_diarios").Cells(1, 1), Sheets("KM_diarios").Cells(maxrow, maxcolumn)).ClearContents

Observa la diferencia con tu código inicial (Utilizar Sheets o WorkSheets, es indiferente)

publicado

Entiendo. No puedo usar Range(Cells(1, 1). Si me refiero a Range y uso Cells, debo usar Range("nombre de la hoja").(Cells(1,1))

Usando With / End With evito escribir repetidamente el nombre de la hoja, pero entre Range y Cells he de hacer referencia a la hoja, y antes de Range igualmente.

Esto he de memorizarlo, es si o si y no confundirme en el método.

Si me confundo corrígeme por favor!

Gracias @Antoni

Moisés.

 

 

publicado
En 29/11/2020 at 14:18 , Pirtrafilla dijo:

Hola a todos. 

Perdonar con este asunto, creo que debe ser una tontería, pero no logro ver el error.

Con esta sentencia me da error:




Worksheets("KM_iniciales").Range(Cells(1, 1), Cells(maxrow, maxcolumn)).ClearContents

Y sin embargo así funciona.




Worksheets("KM_iniciales").Range("A1:K" & maxrow).ClearContents

Quisiera que la columna a eliminar no fuera siempre la K porque podría ser otra, por eso quiero hacerlo con cells, pero no logro que funcione. ¿Qué estoy poniendo mal?

Teniendo en cuenta que busca la última fila y columna así.




maxcolumn = Worksheets("KM_iniciales").Cells.SpecialCells(xlLastCell).Column
maxrow = Worksheets("KM_iniciales").Cells.SpecialCells(xlLastCell).Row

 

Gracias.

Moisés.

 

Hola

A VBA siempre, pero siempre debes especificarle donde operar, sea cual sea el objeto

En tu caso no le estabas especificando en el rango la hoja, entonces estaba tomando por defecto, la hoja activa

Porque si te funciona la segunda, pues porque con esa estructura de rango, es suficiente con escribir solo una vez el nombre de la hoja y la declaracion del rango es una cadena de texto, worksheets("name").range("string")

En la primera opcion, puedes ver que no especificaste el nombre de la hoja a Cells

Por eso es recomendable siempre usar el controlador o la estructura With (en el caso que el objeto se repita dentro del sub proceso)

Mira una alternativa mas

Private Function ClearIniciales()

With Worksheets("KM_iniciales")
    maxcolumn = VBA.Split(.Cells.SpecialCells(xlLastCell).Address, "$")(1)
    maxrow = .Cells.SpecialCells(xlLastCell).Row
    .Range(.Cells(1, 1), .Cells(maxrow, maxcolumn)).ClearContents
End With

End Sub

Private Function ClearIniciales()

With Worksheets("KM_iniciales")
    maxcolumn = VBA.Split(.Cells.SpecialCells(xlLastCell).Address, "$")(1)
    maxrow = .Cells.SpecialCells(xlLastCell).Row
    .Range("A1:" & maxcolumn & maxrow).ClearContents
End With

End Sub

La variable maxcolumn funciona en ambos caso, pues Cells, acepta numero o letra

Ojo mira bien, que se antepone un punto (.) en cada Cells, porque estamos utilizando With

 

Saludos

publicado
Hace 2 horas, Gerson Pineda dijo:

Hola

A VBA siempre, pero siempre debes especificarle donde operar, sea cual sea el objeto

En tu caso no le estabas especificando en el rango la hoja, entonces estaba tomando por defecto, la hoja activa

Porque si te funciona la segunda, pues porque con esa estructura de rango, es suficiente con escribir solo una vez el nombre de la hoja y la declaracion del rango es una cadena de texto, worksheets("name").range("string")

En la primera opcion, puedes ver que no especificaste el nombre de la hoja a Cells

Por eso es recomendable siempre usar el controlador o la estructura With (en el caso que el objeto se repita dentro del sub proceso)

Mira una alternativa mas



Private Function ClearIniciales()

With Worksheets("KM_iniciales")
    maxcolumn = VBA.Split(.Cells.SpecialCells(xlLastCell).Address, "$")(1)
    maxrow = .Cells.SpecialCells(xlLastCell).Row
    .Range(.Cells(1, 1), .Cells(maxrow, maxcolumn)).ClearContents
End With

End Sub

Private Function ClearIniciales()

With Worksheets("KM_iniciales")
    maxcolumn = VBA.Split(.Cells.SpecialCells(xlLastCell).Address, "$")(1)
    maxrow = .Cells.SpecialCells(xlLastCell).Row
    .Range("A1:" & maxcolumn & maxrow).ClearContents
End With

End Sub

La variable maxcolumn funciona en ambos caso, pues Cells, acepta numero o letra

Ojo mira bien, que se antepone un punto (.) en cada Cells, porque estamos utilizando With

 

Saludos

@Gerson Pineda , muchas gracias por tu explicación y por el tiempo que te has tomado en explicármelo.

Me has dado varios apuntes a tener muy en cuenta.

Te lo agradezco!

Moisés.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.