Como mostrar u ocultar un número de hojas de acuerdo al valor de una celda

Tengo un libro de excel que se compone por 15 hojas (Hoja(1), Hoja(2), Hoja(3)... Hoja(15)); lo que deseo realizar es que si en la celda AO4 DE la Hoja(1) pongo el valos 9, me muestre hasta la Hoja(9), si pongo 3, me muestre hasta la Hoja(3) o que si pongo 16, me mande un mensaje de error.

Respuesta
1

Aquí lo tienes:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For Each Sheet In ActiveWorkbook.Sheets
If Sheet.Name <> ActiveSheet.Name Then
    Sheet.Visible = False
End If
Next Sheet
v = Range("AO4").Value
If v > 15 Then
    MsgBox "Por favor, introduce un valor de cero a 15"
Else
    For B = 2 To v
        Sheets("Hoja" & B).Visible = True
    Next
End If
End Sub

Muchas gracias Víctor ibarz, estoy haciendo pruebas pero no funciona, no se si lo estoy haciendo mal o que es lo que sucede

Inserte la macro en la hoja 1 en visual basic y conforme pongo la celda activa marca un error 9 en tiempobde ejecución

Que puedo hacer?

Será por los nombres de las hojas, tal y como indica Dante, si el número de hoja va entre paréntesis el código debería ser así:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For Each Sheet In ActiveWorkbook.Sheets
If Sheet.Name <> ActiveSheet.Name Then
    Sheet.Visible = False
End If
Next Sheet
v = Range("AO4").Value
If v > 15 Then
    MsgBox "Por favor, introduce un valor de cero a 15"
Else
    For B = 2 To v
        Sheets("Hoja(" & B & ")").Visible = True
    Next
End If
End Sub

1 respuesta más de otro experto

Respuesta
2

H o l a:

Según tu ejemplo, los nombres de hojas deben ser así:

Hoja(1), Hoja(2), Hoja(3)... Hoja(15), es decir, el número va entre paréntesis.

Pon la siguiente macro en los eventos de la Hoja(1).

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Not Intersect(Target, Range("AO4")) Is Nothing Then
        Application.ScreenUpdating = False
        If Target.Count > 1 Then Exit Sub
        If Target.Value = "" Then Exit Sub
        If Target.Value = 0 Then
            MsgBox "Número mínimo de hojas: 1"
            Target.Value = ""
            Target.Select
            Exit Sub
        End If
        If Not IsNumeric(Target.Value) Then
            MsgBox "Solamente números"
            Target.Value = ""
            Target.Select
            Exit Sub
        End If
        hojas = Sheets.Count
        If Target > hojas Then
            MsgBox "Número máximo de hojas: " & hojas
            Target.Value = ""
            Target.Select
            Exit Sub
        End If
        For i = 2 To hojas
            On Error Resume Next
            If i < Target.Value + 1 Then
                Sheets("Hoja(" & i & ")").Visible = -1
            Else
                Sheets("Hoja(" & i & ")").Visible = 0
            End If
        Next
    End If
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(Hoja(1))
  4. En el panel del lado derecho copia la macro

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

¡Gracias!

Una disculpa por la demora en responder, con las lluvias mi lap se daño, pero eso es otro tema.

Funcionó a la perfección muchísimas gracias, como siempre muy puntual y preciso.

De igual manera a Víctor por su interés y ayuda.

Saludos y nuevamente gracias.

Al final de mi respuesta hay un botón para valorar la respuesta.

No olvides valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas