** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Ocultar filas
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoOcultar filas

 Responder Responder
Autor
Mensaje
Gladiador Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 220
Enlace directo a este mensaje Tema: Ocultar filas
    Enviado: 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



Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 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.
Arriba
Gladiador Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 220
Enlace directo a este mensaje Enviado: 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
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3849
Enlace directo a este mensaje Enviado: 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
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 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.


Editado por AnSanVal - 05/Septiembre/2022 a las 18:26
Saludos desde Tenerife.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 05/Septiembre/2022 a las 18:14
Luis; nos cruzamos en el camino... mientras mirábamos las nubes. Wink


Saludos desde Tenerife.
Arriba
Gladiador Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 220
Enlace directo a este mensaje Enviado: 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
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3849
Enlace directo a este mensaje Enviado: 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
Arriba
Gladiador Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 220
Enlace directo a este mensaje Enviado: 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
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable