No entiendo muy bien por qué mi código no funciona. Básicamente, en la celda B5 tengo dos opciones, "calc_1" y "calc_2", que el usuario puede seleccionar mediante el menú desplegable.
Quiero que se muestren las filas 6 a 29 y que se oculten las filas 30 a 53 si se selecciona calc_1, y viceversa para calc_2. A continuación se muestra el código que escribí:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("B5").Value = "calc_1" Then
Rows("6:29").EntireRow.Hidden = False
Rows("30:53").EntireRow.Hidden = True
ElseIf Range("B5").Value = "calc_2" Then
Rows("6:29").EntireRow.Hidden = True
Rows("30:53").EntireRow.Hidden = False
End If
End Sub
Cuando ejecuto este código, solo se muestran las filas 6 a 29, sin importar la selección que haga. No estoy seguro de lo que me estoy perdiendo aquí.
Respuesta1
Cambio de hoja de trabajo e intersección
El código se ejecutaba en cada cambio en la hoja de trabajo. Debe restringirlo para que se ejecute solo cuando se haya producido un cambio en la celda
B5
...If not Intersect(Range("B5"), Target) Is Nothing Then ' do your stuff End If
... o como en el código:
If Intersect(Range("B5"), Target) Is Nothing Then Exit Sub ' do your stuff
EntireRow es redundante en este caso, como lo mencionó harrymc en los comentarios.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iCell As Range: Set iCell = Intersect(Range("B5"), Target)
If iCell Is Nothing Then Exit Sub
If iCell.Value = "calc_1" Then
Rows("6:29").Hidden = False
Rows("30:53").Hidden = True
ElseIf iCell.Value = "calc_2" Then
Rows("6:29").Hidden = True
Rows("30:53").Hidden = False
'Else ' do nothing
End If
End Sub
Opcionalmente, puedes usar Select Case
en lugar de If ElseIf
.
Select Case iCell.Value
Case "calc_1"
Rows("6:29").Hidden = False
Rows("30:53").Hidden = True
Case "calc_2"
Rows("6:29").Hidden = True
Rows("30:53").Hidden = False
'Case Else ' do nothing
End Select