简体   繁体   中英

Hide rows in sheet 1 and 2 based on cell value in sheet 1

I need a VBA which will hide rows 34:53 on sheet1 (called "Progression") and sheet2 (called "Map") based on the value of Sheet("Progression").Range("A8")

Cell A8 is a dropdown menu displaying Australian cities. I've already arranged that a blank space will be entered after the city name if I need the rows to be hidden (eg "Melbourne " will require hidden rows, "Melbourne" will require visible rows). I've currently got the code going through each location with and without spaces which is a bit annoying...is there a way to say "If A8 has "* " then hide rows 34:53 on Sheet("Progression") and rows 34:53 on Sheet("Map")"

My current code is below (located on Sheet("Progression")).

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(False, False) = "A8" Then
    Select Case Target.Value
        Case "Queensland": Rows("34:53").Hidden = False
        Case "Queensland ": Rows("34:53").Hidden = True
        Case "Melbourne": Rows("34:53").Hidden = False
        Case "Melbourne ": Rows("34:53").Hidden = True
        Case "Ballarat": Rows("34:53").Hidden = False
        Case "Ballarat ": Rows("34:53").Hidden = True
        Case "Brisbane": Rows("34:53").Hidden = False
        Case "Brisbane ": Rows("34:53").Hidden = True
        Case "Canberra": Rows("34:53").Hidden = False
        Case "Canberra ": Rows("34:53").Hidden = True
        Case "North Sydney": Rows("34:53").Hidden = False
        Case "North Sydney ": Rows("34:53").Hidden = True
        Case "Strathfield": Rows("34:53").Hidden = False
        Case "Strathfield ": Rows("34:53").Hidden = True
    End Select
End If

End Sub

Any help would be appreciated :)

Since you require to hide rows if the last character in the selected value has a space, the below code should work

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim trigger As Boolean
    If Target.Address(False, False) = "A8" Then
        trigger = False
        If Right(Target.Value, 1) = " " Then
            trigger = True
        End If
    End If

    ThisWorkbook.Worksheets("Progression").Rows("34:53").Hidden = trigger
    ThisWorkbook.Worksheets("Map").Rows("34:53").Hidden = trigger

End Sub

Maybe like this:

In the select statement set a variable instead of hiding the rows.

Then use a separate statement to set the row visibility with the variable and do that for the other sheet, too.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim trigger As Boolean
    If Target.Address(False, False) = "A8" Then
    Select Case Target.Value
        Case "Queensland": trigger = False
        Case "Queensland ": trigger = True
        Case "Melbourne": trigger = False
        Case "Melbourne ": trigger = True
        Case "Ballarat": trigger = False
        Case "Ballarat ": trigger = True
        Case "Brisbane": trigger = False
        Case "Brisbane ": trigger = True
        Case "Canberra": trigger = False
        Case "Canberra ": trigger = True
        Case "North Sydney": trigger = False
        Case "North Sydney ": trigger = True
        Case "Strathfield": trigger = False
        Case "Strathfield ": trigger = True
    End Select
End If

ThisWorkbook.Worksheets("Progression").Rows("34:53").Hidden = trigger
ThisWorkbook.Worksheets("Map").Rows("34:53").Hidden = trigger

End Sub

You could go like follows:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$8" Then
        Rows("34:53").Hidden = Right(Target.Value, 1) = " " ' <--| "Progression" is your active sheet
        Worksheets("Map").Rows("34:53").Hidden = Right(Target.Value, 1) = " "
    End If
End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM