SOLVED

Refactoring Code - VBA Script

Brass Contributor

Hi everyone, could someone help me out on refactoring my code please in an efficient way. I am new to VBA scripting. It is basically a drop-down list, that hides/shows rows when a list is selected. Thanks in advance.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 16 And Target.Row = 3 Then
        If Target.Value = "Option 1" Then
            Worksheets("Annual").Range("66:66,75:75,134:134,171:178,244:244,246:246,256:259,263:263").EntireRow.Hidden = True
            Worksheets("Annual").Range("65:65,168:170,197:197,216:235,239:242,247:247,264:264,275:275").EntireRow.Hidden = False
        ElseIf Target.Value = "Option 2" Then
            Worksheets("Annual").Range("66:66,75:75,134:134,171:178,244:244,246:246,256:259,263:263").EntireRow.Hidden = False
            Worksheets("Annual").Range("65:65,168:170,197:197,216:235,239:242,247:247,264:264,275:275").EntireRow.Hidden = True
        ElseIf Target.Value = "All" Then
            Worksheets("Annual").Range("66:66,75:75,134:134,171:178,244:244,246:246,256:259,263:263,65:65,168:170,197:197,216:235,239:242,247:247,264:264,275:275").EntireRow.Hidden = True
        End If
    End If
    
End Sub

 

2 Replies
best response confirmed by rbalza (Brass Contributor)
Solution

@rbalza 

No need to refactor this code. You might use Select Case:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 16 And Target.Row = 3 Then
        Select Case Target.Value
        Case "Option 1"
            Worksheets("Annual").Range("66:66,75:75,134:134,171:178,244:244,246:246,256:259,263:263").EntireRow.Hidden = True
            Worksheets("Annual").Range("65:65,168:170,197:197,216:235,239:242,247:247,264:264,275:275").EntireRow.Hidden = False
        Case "Option 2"
            Worksheets("Annual").Range("66:66,75:75,134:134,171:178,244:244,246:246,256:259,263:263").EntireRow.Hidden = False
            Worksheets("Annual").Range("65:65,168:170,197:197,216:235,239:242,247:247,264:264,275:275").EntireRow.Hidden = True
        Case "All"
            Worksheets("Annual").Range("66:66,75:75,134:134,171:178,244:244,246:246,256:259,263:263,65:65,168:170,197:197,216:235,239:242,247:247,264:264,275:275").EntireRow.Hidden = True
        End Select
    End If
End Sub
Thanks always for your help mate!
1 best response

Accepted Solutions
best response confirmed by rbalza (Brass Contributor)
Solution

@rbalza 

No need to refactor this code. You might use Select Case:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 16 And Target.Row = 3 Then
        Select Case Target.Value
        Case "Option 1"
            Worksheets("Annual").Range("66:66,75:75,134:134,171:178,244:244,246:246,256:259,263:263").EntireRow.Hidden = True
            Worksheets("Annual").Range("65:65,168:170,197:197,216:235,239:242,247:247,264:264,275:275").EntireRow.Hidden = False
        Case "Option 2"
            Worksheets("Annual").Range("66:66,75:75,134:134,171:178,244:244,246:246,256:259,263:263").EntireRow.Hidden = False
            Worksheets("Annual").Range("65:65,168:170,197:197,216:235,239:242,247:247,264:264,275:275").EntireRow.Hidden = True
        Case "All"
            Worksheets("Annual").Range("66:66,75:75,134:134,171:178,244:244,246:246,256:259,263:263,65:65,168:170,197:197,216:235,239:242,247:247,264:264,275:275").EntireRow.Hidden = True
        End Select
    End If
End Sub

View solution in original post