MACRO que seleccione varias hojas y realice acciones en las hojas seleccionadas

Necesito una macro que seleccione 5 hojas en especifico de mi libro y sobre eso realizar el oculta miento de filas según condición...

Intente hacer esto :

Sub SeleccionarHojasalaVezINVETARIOS()
Sheets(Array(Hoja1.Name, Hoja2.Name, Hoja3.Name, Hoja4.Name, Hoja5.Name)).Select

Hoja1.Select
End Sub


Sub ocultafilasINVETARIOS()
Application.ScreenUpdating = False
oculta_col_A
Application.ScreenUpdating = False
Application.Calculation = xlManual
For Each celda In Range("A7:A934")
If celda.Value = 1 Then
celda.EntireRow.Hidden = True
Else
celda.EntireRow.Hidden = False
End If
Next
Application.Calculation = xlAutomatic
End Sub


Sub SeleccionarHojasalaVezINVETARIOS()
Sheets(Array(Hoja1.Name, Hoja2.Name, Hoja3.Name, Hoja4.Name, Hoja5.Name)).Select
ocultafilasINVETARIOS
Hoja1.Select
End Sub

Pero es lento y no funciona en las hojas que se "seleccionan" no se seleccionan y solo en la hoja 1 se ejecuta el código..

1 respuesta

Respuesta
1

H o l a:

Si vas a ocupar el code name de la hoja, no es necesario que utilices el nombre de la hoja. Puedes utilizar directamente el objeto de la hoja.

Tampoco es necesario que selecciones la hoja para realizar una operación en la hoja, con solo hacer la referencia de la hoja, en este caso el objeto de la hoja, puedes realizar cualquier actividad.

La siguiente macro la puedes ejecutar desde cualquier hoja, utiliza los objetos de la hoja y no necesita cambiarse de hoja.

Sub OcultarFilas()
'Por.Dante Amor
    hs = Array(Hoja1, Hoja2, Hoja3, Hoja4, Hoja5)
    For h = LBound(hs) To UBound(hs)
        hs(h).Range("A7:A934").EntireRow.Hidden = False
        For i = 7 To 934
            If hs(h).Range("A" & i) = 1 Then
                hs(h).Rows(i).Hidden = True
            End If
        Next
    Next
End Sub

Ejecuté la macro para las 5 hojas y las 934 líneas y tardó 2 segundos, si tarda más en tus hojas, puede ser por el tamaño de tu archivo, por la cantidad de hojas.

S a l u d o s

Hola dan si me funciona

Y si quiero mostrar todo de nuevo incluso los que tienen el numero 1

Osea como estaba antes de ejecutar el código

esta bien asi?

Sub MostrarFilasINVETARIOS()
'Por.Dante Amor
Application.ScreenUpdating = False
hs = Array(Hoja1, Hoja2, Hoja3, Hoja4, Hoja5)
For h = LBound(hs) To UBound(hs)
hs(h).Range("A7:A934").EntireRow.Hidden = False
For i = 7 To 934
If hs(h).Range("A" & i) = 1 Then
hs(h).Rows(i).Hidden = False
End If
Next
Next
End Sub

Si quieres mostrar todo, basta con esto:

Sub MostrarFilasINVETARIOS()
'Por.Dante Amor
    Application.ScreenUpdating = False
    hs = Array(Hoja1, Hoja2, Hoja3, Hoja4, Hoja5)
    For h = LBound(hs) To UBound(hs)
        hs(h).Range("A7:A934").EntireRow.Hidden = False
    Next
End Sub

salud os

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas