Que le falta a este código para que funcione, el objeto es oculta las fillas en blanco de una plantilla de cotizaciones y es:

Sub OcultarFilasEnBlanco()
Range("B8:K37").Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = " " Then
ActiveCell.EntireRow.Hidden = True
End If

ActiveCell.Offset(1, 0).Select
Loop
End Sub

1 Respuesta

Respuesta
1

Hol.a

Prueba así, solo reemplaza por tu rango:

Sub Ocultar()
Dim Celda As Range
For Each Celda In Range("A1:A20")
If Celda.Value = Empty Then
    Celda.EntireRow.Hidden = True
End If
Next Celda
End Sub

Otra cosa, no es lo mismo esto " " que esto "", ojo con eso.

Salu2

Abraham Valencia

Abraham, muchas gracias, funciona bien, lo que me falta es que las filas que tiene información de productos que estoy cotizando, estas no sea ocutadas, claro que cuando con una instrucción acciono me las muestra todas, es decir que no me las borró, lo cual esta perfecto, se culminaría si las ocupadas con información no sean ocultadas, es decir solo las en blanco. Muy agradecido, voy aprendiendo. Saludos

No estoy seguro pero creo que lo que quisiste decir es que solo se oculten si todas las celdas de la fila están vacías, de ser así, usa esto tal cual:

Sub Ocultar()
Dim Celda As Range
Dim nCelda As Long
For Each Celda In Range("B8:B37")
Let nCelda = Celda.Row
If Application.WorksheetFunction.CountA(Range("B" & nCelda & ":" & "K" & nCelda)) = 0 Then
    Celda.EntireRow.Hidden = True
End If
Next Celda
End Sub

Abraham Valencia

Estimado Abraham, el primer código esta más cerca, aunque solo falta hacer que respete las filas que están con productos que se supone se están cotizando, los otros códigos, a mi no me funcionan, y estoy seguro es por mi falta de conocimiento, ya que si bien es cierto he trabajado con hojas de calculo y en cierto momentos con códigos, muy simples. Como quiera que me he jubilado, y todos sebemos que si al cerebro no lo ejercitas, como todo, pierde eficacia. Y una hija me pidió que le haga una hoja o mejor dicho plantila para hacer sus cotizaciones, y eso estoy trantado de hacer. Muchas gracias por tu paciencia y ayuda para entender mejor este lenguaje que me parece muy interesante. Muchas gracias. Orlando Dávila

Orlando, para no estar tratando de entender y no necesariamente acertando, te sugiero/pido que trates de "subir" a algún "drive" un archivo con al menos una muestra de lo que tienes en una hoja (uno 6 filas de "muestra") y en otra hoja del mismo archivo el resultado que esperas como para entender.

Salu2

Abraham Valencia

Muchas gracias trataré de subirlo a la nube, espero poder hacerlo o por un mail, tratare lo primero. Muchas gracias. 

La nube me parecido facil; pero me parece un poco complicado, hay que hacer una configuración que la verdad tengo poca familiarizacion con lo de las configuraciones, si fueras tan amable te envío la hoja que estoy trabajando a un correo que me indiques. Te vas a reír porque mis coddigos que el 80% son copias de ejemplos que sadco de Youtube, son copias que para que me funcionen las he modificado, estoy seguro que un experto como tú hace el código en cuatro líneas y yo lo hago en 20 líneas y en mucho tiempo. Muchas Gracias

Hol. A nuevamente. Soy sincero y prefiero no dar mi correo por aquí además de que me parece más propio de los foros compartir toda la información de manera pública para así, además, dar chance a que otros participen/ayuden.  Tómate un tiempo y/o pide que te ayuden a usar algún "drive".

Abraham Valencia

¡Gracias! Así lo haré.

Abraham, Después de mucho probar, he regresado al código, que me funciona, pero el problema es que no se detiene. Mejor dicho, si oculta las filas en blanco, pero no para el ciclo, continua el loop en forma indeterminada y los botones titilan y se ve que las celdas continúan titilando y suben de numero me voy has las 700 y tantas muy rápido. Solo falta PARAR el loop, y quedaría perfecto. Y así grabar como un PDF y después con la línea siguiente, conectada a un botón me devuelve las filas en blanco, restituyendo el estado en la hoja de Cotización. Este es el código con el efecto mencionado. Y Muchas gracias por tu amable y gentil ayuda. Saludos. Orlando.

Sub OcultarFilasEnBlanco()
Range("B8").Select
'
Do While ActiveCell.Value <> " "
If ActiveCell.Value = "" Then
ActiveCell.EntireRow.Hidden = True
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub

_____________________________

Sub MostrarFilasEnBlanco()
Rows.EntireRow.Hidden = False
End Sub

Pues tú le estás diciendo a ese bucle que siga avanzando por todas las celdas diferente a " ", es es un espacio en blanco, que no es lo mismo que una celda vacía, por lo tanto parará cuando encuentre eso, un espacio en blanco en alguna celda que creo no lo tienes.

Abraham Valencia

Bien, gracias por ubicar el problema, entonces que me sugieres que modifique o inserte en el código, para que pare, el bucle, que repito continua sin detenerse. Y Muchas gracias por tu gentil ayuda.

Orlando Dávila

Orlando quizá una cosa sería que vayas a la celda en donde consideras que debe detenerse y le des un espacio en blanco y listo. Como no conozco tus datos y no llegué a entender al 100% tu dilema, no se me ocurre otra cosa. Si tu última celda tiene siempre un dato, cualquiera que sea, quizá volver a los del "For Each" pero no sé si llegaste a entender como funciona.

Abraham Valencia

Estimado Abraham, mis conocimientos de vba, son muy incipientes, trato de ejercitar mis facultades mentales, y he escogido el lenguaje, porque lo encuentro muy interesante a mi gusto. Yo como hago mis ejercicios, viendo lecciones en la WEb, y algo se aprende. Bien el código al que me afrerro es a este:

 Sub OcultarFilasEnBlanco()
Range("B8").Select
'
Do While ActiveCell.Value <> " "
If ActiveCell.Value = "" Then
ActiveCell.EntireRow.Hidden = True
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Porque me funciona bien, no borra las oculta que lo que pretendo. Te consulto, donde le pondrías la celda en blanco que obligaría al macro a terminar y no a seguir en un bucle interminable. Ojo una vez que ha ocultado las celdas en blanco, no se detiene. Honestamente no se lo que debo insertar.

Saludos y gracias.

Orlando

Sitúa el cursor en la última celda con datos de la columna "B", luego, una celda debajo de esa, dale "F2" e ingresa un espacio en blanco con la barra espaciadora, uno solo, no más, presiona "Enter" y vuelve a correr tu macro.

Abraham Valencia

PD: Yo no lo haría así pero es tu decisión

Mi estimado señor y amigo Abraham, este código que tu me enviaste:

Sub OcultarFilasEn_Blanco_Abraham()
Dim Celda As Range
For Each Celda In Range("A8:A37")
If Celda.Value = Empty Then
Celda.EntireRow.Hidden = True
End If
Next Celda
End Sub

Funciona perfecto, impecable, en la plantilla de cotizaciones que estoy tratando de completar; solo que oculta todas las celdas desde la A8 hasta la A37, que es el rango donde va la información de la cotización. La idea es que oculte solo las vacías o en blanco y deje a la vista las llenas con información, vale decir las filas ocupadas. Cual seria tu amable sugerencia. Muchas Gracias por tu generosa ayuda.

Manda por aquí una captura de pantalla de la columna "A" de la hoja del dilema

Abraham Valencia

Tiene 30 filas para llenar con productos, por lo que es muy larga y por lo tanto es aconsejable ocultar. Muchas gracias

Abraham, te adjunto, la 1° imagen que es como funciona, con el código y la 2° como queda haciendo el ocultamiento manual. Pienso que tal vez podría hacerse una plantilla dinámica, vale decir, con una sola fila, una vez ingresado el producto se incremente en una fila y así sucesivamente, bueno es solo una posibilidad. Muchas gracias. Orlando.

Era solo cosa de cambiar el rango:

Sub Ocultar()
Dim Celda As Range
For Each Celda In Range("B8:B37")
If Celda.Value = Empty Then
    Celda.EntireRow.Hidden = True
End If
Next Celda
End Sub

Salu2 desde Lima

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas