Imprimir página | Cerrar ventana

Ocultar filas

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Excel
Descripción del foro: Foro de Excel y VBA de Excel
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86453
Fecha de impresión: 26/Marzo/2026 a las 19:25


Tema: Ocultar filas
Publicado por: Gladiador
Asunto: Ocultar filas
Fecha de publicación: 05/Septiembre/2022 a las 06:43
Hola a todos.

Bebo generar un reporte mensual en una tabla y quisiera ocultar las filas que no tengan valores.
Es decir, la tabla esta diseñada para mostrar datos en 36 filas, si hay un reporte que solo tenga datos en ,digamos 32 filas, desearía ocultarlas filas 33 a la 36.

He construido la siguiente macro, pero me da error

     Sub Macro20()
'
     Dim m
'
     m = Range("c5").Value
'
         Rows("m:36").EntireRow.Hidden = True
     End Sub

La celda "c5" contiene el número siguiente de la ultima fila de la tabla que tiene algún valor/dato.
El error lo genera en la instrucción Rows("m:36")    "type mismatch"
Como puedo resolverlo

Gracias






Respuestas:
Publicado por: AnSanVal
Fecha de publicación: 05/Septiembre/2022 a las 13:49
Considerando que m es la primera fila a ocultar:

Range("A" & m & ":A36").EntireRow.Hidden = True




-------------
Saludos desde Tenerife.


Publicado por: Gladiador
Fecha de publicación: 05/Septiembre/2022 a las 17:33
Gracias AnSanVal, tu sugerencia me ha resultado bien.

Sin embargo, me ha surgido otro problema.
He desarrollado la siguiente macro, pero no hace absolutamente nada. Quisiera tu ayuda para saber que no estoy haciendo correctamente.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim m
m = Range("c5").Value
        
    If Target.Address = "B5" Then
'En la celda B5 selecciono el mes que deseo ver
Application.ScreenUpdating = False
        Range("A20:A36").EntireRow.Hidden = False
'Primero muestro todas las celdas y luego oculto aquellas donde no hay valores/datos

        Range("A" & m & ":A36").EntireRow.Hidden = True

Application.ScreenUpdating = True
     End If

End Sub


Gracias


Publicado por: lbauluz
Fecha de publicación: 05/Septiembre/2022 a las 17:59
Prueba poniéndolo así:

    If Target.Address = "$B$5" Then


Y ya puestos, yo cambiaría 

m = Range("c5").Value
    If Target.Address = "B5" Then

por

   If Target.Address = "$B$5" Then
m = Range("c5").Value


Solo por ahorrar in instante....

Un saludo.

Luis


-------------
El Búho es un pajarraco


Publicado por: AnSanVal
Fecha de publicación: 05/Septiembre/2022 a las 18:09

La ejecución nunca podrá trabajar dentro de tu condicional, debido que Target.Address nunca podra ser igual a B5.


Target.Addres(False,False) = B5

Target.Addres(True,True)  o Target.Addres = $B$5



► Para «curarte en salud» yo incluiría lo que te pongo en rojo y negrita:


Sub algo()

  Dim m

  m = Range("c5").Value

        

  If Target.Address = "$B$5" Then

    Application.ScreenUpdating = False

    Range("A20:A36").EntireRow.Hidden = False

    If m < 37 Then

      Range("A" & m & ":A36").EntireRow.Hidden = True

    End If

    Application.ScreenUpdating = True

  End If

End Sub



Editado ASV: Lo de Sub algo() no lo tengas en cuenta, lo hice en un módulo ordinario para mis pruebas.


-------------
Saludos desde Tenerife.


Publicado por: AnSanVal
Fecha de publicación: 05/Septiembre/2022 a las 18:14
Luis; nos cruzamos en el camino... mientras mirábamos las nubes. Wink




-------------
Saludos desde Tenerife.


Publicado por: Gladiador
Fecha de publicación: 05/Septiembre/2022 a las 20:29
Hola a todos, gracias por su tiempo e interés en este hilo

La sugerencia de AnSanVal me ha funcionado bien:
        Range("A" & m & ":A36").EntireRow.Hidden = True

He creado una macro como sigue y me funciona
Sub algo()
Dim m
m = Range("c5").Value
    
    
'
Application.ScreenUpdating = False
Range("A20:A36").EntireRow.Hidden = False
'
Range("A" & m & ":A36").EntireRow.Hidden = True
Application.ScreenUpdating = True

End Sub


Ahora bien, si incluyo la instrucción:
If Target.Address = "$B$5" Then
.
.
End if
Me dice:
Run-time error '424':
Object Required
Si hago "click" en el botón depurar (debug) me sombrea en amarillo la instrucción:
          If Target.Address = "$B$5" Then

Por otra parte, mi interés es incluir la macro completa dentro de:
Private Sub Worksheet_Change(ByVal Target As Range)

De tal manera que se actualice al cambiar el valor de la celda B5
Pero no hace absolutamente nada

No se que pueda estar haciendo mal.....Cry

Agradecido con su ayuda


Publicado por: lbauluz
Fecha de publicación: 06/Septiembre/2022 a las 10:36
Claro que te da error, ahora no tienes Target.

 Si pones la función como  Private Sub Worksheet_Change(ByVal Target As Range) le estás pasando Target como una variable, pero si pones Sub algo() no estás pasando esa variable y te va a fallar.

Ahora bien, como dice AnSanVal, si en B5 pones el valor 47, vas a tener un problema, porque está fuera del rango que intentas comprobar, pero eso a la macro le da igual.

Por lo tanto te recomiendo algo como:

Sub Worksheet_Change(ByVal Target As Range)
 Dim m

m = Range("c5").Value

  If Target.Address = "$B$5" Then
    Application.ScreenUpdating = False
    Range("A20:A36").EntireRow.Hidden = False
    If m < 37 Then
      Range("A" & m & ":A36").EntireRow.Hidden = True
    End If
    Application.ScreenUpdating = True
  End If

End Sub


Luis


-------------
El Búho es un pajarraco


Publicado por: Gladiador
Fecha de publicación: 06/Septiembre/2022 a las 20:25
Gracias amigos, me ha resultado bien la última propuesta de Luis.
Se puede cerrar el hilo

Muy agradecido



Imprimir página | Cerrar ventana