简体   繁体   中英

Excel VBA to hide rows based on another cell selection can't get code to work

I have the following code, which I am trying to use to hide specific rows based on a result of another cell. (there is a formulae in this cell which concatentates the result from a series of other cells into a letter - A, B, C, etc.)

However there must be something wrong in my code because I cannot get it to work - nothing changes irrespective of what I change for the target cell.

This is my code - I am using Excel 2016 if that's of any relevant

Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "G26" Then
Select Case Target.Value
        Case "A": Rows("45:45,47,53:57,77:78").Hidden = True
        Case "B": Rows("40:52,77, 78,80,,85").Hidden = True
        Case "C": Rows("43,45,46,47,49,53:57,61:83").Hidden = True
        Case "D": Rows("40:49,53:57,77,78,80").Hidden = True
        Case "E": Rows("53:57").Hidden = True
        Case "F": Rows("43,46,47,50:57").Hidden = True
        Case "G": Rows("43,45:47,50:53").Hidden = True
        Case "FG": Rows("43,46,47,50:57").Hidden = True
        Case "H": Rows("41:42,44,45:57,77,78,80").Hidden = True
        Case "I": Rows("40:49,53:57,77:78,80:82").Hidden = True
        Case "HI": Rows("41:42,44,45:49,53:57,77,78,80").Hidden = True
        Case "J": Rows("41:57,63,67,72,74:83").Hidden = True
        Case "": Rows("40:85").Hidden = False
    End Select
End If
End Sub

Use Range().EntireRow.Hidden instead of Rows().Hidden to allow lists of rows in the format you want

Ie replace your

Rows("xyz").Hidden = True

with

Range("xyz").EntireRow.Hidden = True

I used find and replace on your original code to produce the following (note I also deleted a double comma ,, in one of the lines) - Try this:

Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "G26" Then
Select Case Target.Value
        Case "A": Range("45:45,47:47,53:57,77:78").EntireRow.Hidden = True
        Case "B": Range("40:52,77:78,80:80,85:85").EntireRow.Hidden = True
        Case "C": Range("43:43,45:47,49:49,53:57,61:83").EntireRow.Hidden = True
        Case "D": Range("40:49,53:57,77:78,80:80").EntireRow.Hidden = True
        Case "E": Range("53:57").EntireRow.Hidden = True
        Case "F": Range("43:43,46:47,50:57").EntireRow.Hidden = True
        Case "G": Range("43:43,45:47,50:53").EntireRow.Hidden = True
        Case "FG": Range("43:43,46:47,50:57").EntireRow.Hidden = True
        Case "H": Range("41:42,44:57,77:78,80:80").EntireRow.Hidden = True
        Case "I": Range("40:49,53:57,77:78,80:82").EntireRow.Hidden = True
        Case "HI": Range("41:42,44:45:49,53:57,77:78,80:80").EntireRow.Hidden = True
        Case "J": Range("41:57,63:63,67:67,72:72,74:83").EntireRow.Hidden = True
        Case "": Range("40:85").EntireRow.Hidden = False
    End Select
End If
End Sub

UPDATED ANSWER

Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
    Select Case Range("G26").Value
        Case "A": Range("45:45,47:47,53:57,77:78").EntireRow.Hidden = True
        Case "B": Range("40:52,77:78,80:80,85:85").EntireRow.Hidden = True
        Case "C": Range("43:43,45:47,49:49,53:57,61:83").EntireRow.Hidden = True
        Case "D": Range("40:49,53:57,77:78,80:80").EntireRow.Hidden = True
        Case "E": Range("53:57").EntireRow.Hidden = True
        Case "F": Range("43:43,46:47,50:57").EntireRow.Hidden = True
        Case "G": Range("43:43,45:47,50:53").EntireRow.Hidden = True
        Case "FG": Range("43:43,46:47,50:57").EntireRow.Hidden = True
        Case "H": Range("41:42,44:57,77:78,80:80").EntireRow.Hidden = True
        Case "I": Range("40:49,53:57,77:78,80:82").EntireRow.Hidden = True
        Case "HI": Range("41:42,44:45:49,53:57,77:78,80:80").EntireRow.Hidden = True
        Case "J": Range("41:57,63:63,67:67,72:72,74:83").EntireRow.Hidden = True
        Case "": Range("40:85").EntireRow.Hidden = False
    End Select
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(False, False) = "D25" Then
Select Case Target.Value
    Case "Select as appropriate": Range("40:85").EntireRow.Hidden = False
    Case "USA - Breen Road": Range("45:45,47:47,53:57,77:78").EntireRow.Hidden = True
    Case "USA - Conroe": Range("40:52,77:78,80:80,85:85").EntireRow.Hidden = True
    Case "USA - Lafayette": Range("43:43,45:47,49:49,53:57,61:83").EntireRow.Hidden = True
    Case "Europe - Aberdeen": Range("40:49,53:57,77:78,80:80").EntireRow.Hidden = True
    Case "Europe - Gateshead": Range("53:57").EntireRow.Hidden = True
    Case "Middle East - Dubai": Range("43:43,46:47,50:57").EntireRow.Hidden = True
    Case "Middle East - Saudi Arabia": Range("43:43,45:47,50:53").EntireRow.Hidden = True
    Case "middle East - All": Range("43:43,46:47,50:57").EntireRow.Hidden = True
    Case "Far East - Singapore - Loyang": Range("41:42,44:57,77:78,80:80").EntireRow.Hidden = True
    Case "Far East - Singapore - Tuas": Range("40:49,53:57,77:78,80:82").EntireRow.Hidden = True
    Case "Far East - Singapore - All": Range("41:42,44:45:49,53:57,77:78,80:80").EntireRow.Hidden = True
    Case "Far East - Perth - Australia": Range("41:57,63:63,67:67,72:72,74:83").EntireRow.Hidden = True
    End Select
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