Jump to content

Error al limpiar rango de celdas


Recommended Posts

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.

 

Link to post
Share on other sites

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 = ""

 

Edited by Antoni
Link to post
Share on other sites

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)

Edited by Antoni
Link to post
Share on other sites

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.

 

 

Edited by Pirtrafilla
Link to post
Share on other sites
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

Link to post
Share on other sites
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.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Crear macros Excel

  • Posts

    • Bueno, a no ser que me esté equivocando.. como te dije, lo que necesitas es una macro... mejor esperemos una mejor respuesta..   saludos Silvia
    • Gracias Silvia por tu respues, no es exactamente lo que queria, me explico, se trata de automatizar. El caso es que en la hoja original hay una tabla donde simplemente pongo datos (servicios que hace cada uno, situaciones laboales, bajas medicas, vacaciones etc etc) En la hoja contigua sale una especie de estadillo, en la que en una tabla se pone por numeral cuantos por cada cargo de puesto esta en una situacion o en otra. Debajo de esa misma tabla hay que poner de un modo nominal las diferentes situaciones administratvas, y aqui es donde esta la pega, tengo un sitio pero a parte donde salen los resultados y de ahí, dependiendo el tamaño de la tablilla por cuanta gente hay en una situacion laboral entonces tengo que ir haciendo el croquis. Paso una foto para que veas mas o menos de lo que estoy hablando
    • hola tupy77 Tal vez se pueda conseguir con macros, si no te responden por aquí,  puedes volver a consultar en el  módulo de macros.. En realidad no entendí muy bien los datos que calculaste, pero tal vez también lo puedas hacer con Tablas Dinámicas, te adjunto un modelo. Eso si, no se puede una debajo de otra, te saltará error de superposición. Saludos Silvia       Extraer registros haciendo tablas ajustables1.xlsx
    • Le voy a poner un gran handicap,, y en cierto modo en modo facil, y aos dire luego porque, el caso es, SE PUEDE HACER AL CONTRARIO????. Me explico, Si,,,, es muy bonito (y relativamente facil) cuando tu pones las "X" en el turno que le tocaria que te ponga luego un listado con quien va en donde, la cosa es,,,, se puede hace alguna formula para que te haga una prevision simple de como quedarian las guardias a lo largo del mes???? O sea, tengo un listado de personas en un orden, y tienen que entrar cada dia 3 en la mañana, 2 en la tarde y 2 en la noche (por ejemplo) iria a lista corrida. Excel podria hacer que el primer dia ponga a los 3 primeros turno de mañana, a los dos siguientes turno de tarde y a los dos de abajo los dos de noche que faltan.... cuando acaba esta secuencia tendria que pasar al dia siguiente y poner a partir de donde se quedo la lista otros 3+2+2, y si se llegara a acabar la lista de empleados que empiece de nuevo desde arriba desde donde iba al terminar en la columna anterior......   Esto lo llevo intentando un tiempo y no doy con la tecla. OS atreveis a intentar el reto?????   Saludos y gracias
    • Lo que pasa es que hay cosas que son incomprensibles, que solo las sabria el que hizo la tabla, por ejemplo, en la hoja RECIBo en la celda C2 pones un buscarV siempre que A5 este vacia, pero, como saber que poner ahí???? y como esto muchas cosas mas. No me atrevo a tocarla porque no se que es lo que se tiene que poner realmente.... Para arreglar formulas tendrias que dejar mas claro en que celdas hay formulas, si no seria estar buscando y analizando cada celda del libro. Si quieres vamos por partes y di que es lo que te gustaria empezar a cambiar.. y lo hacemos   Saludos
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy