Reputation: 3
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 (e.g. "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 :)
Upvotes: 0
Views: 142
Reputation: 29421
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
Upvotes: 0
Reputation: 2066
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
Upvotes: 2
Reputation: 35915
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
Upvotes: 0