【问题标题】:HIde/Show Rows based on Drop Down List Numeric Selection基于下拉列表数字选择隐藏/显示行
【发布时间】:2019-04-24 01:21:35
【问题描述】:

我有一个包含数字 0 到 10 的下拉列表。零隐藏第 1 到 10 行,1 仅显示第 1 行,2 仅显示第 1 行和第 2 行,依此类推,直到 nbr 10。这按预期工作,我可以从 nbr 1 上升到 10 并显示所有正确数量的行。

我不能做的是,例如,如果我选择了第 5 行,然后选择了第 2 行,我无法隐藏第 5 到第 3 行。

我对 VBA 很陌生,想不出该怎么做冲突的动作。谁能帮我解决这个问题?

If Target.Address = Range("SRUAdd").Address Then
        If Range("SRUAdd").Value = "0" Then    ' hide rows 1 to 10
            Rows((Target.Row + 4) & ":" & (Target.Row + 13)).EntireRow.Hidden = True 

        ElseIf Range("SRUAdd").Value = "1" Then    ' show row #1
            Rows(Target.Row + 4).EntireRow.Hidden = False

        ElseIf Range("SRUAdd").Value = "2" Then    ' show row #2
            Rows((Target.Row + 4) & ":" & (Target.Row + 5)).EntireRow.Hidden = False

        ElseIf Range("SRUAdd").Value = "3" Then    ' show row #3
            Rows((Target.Row + 4) & ":" & (Target.Row + 6)).EntireRow.Hidden = False

        ElseIf Range("SRUAdd").Value = "4" Then    ' show row #4
            Rows((Target.Row + 4) & ":" & (Target.Row + 7)).EntireRow.Hidden = False

        ElseIf Range("SRUAdd").Value = "5" Then    ' show row #5
            Rows((Target.Row + 4) & ":" & (Target.Row + 8)).EntireRow.Hidden = False

        ElseIf Range("SRUAdd").Value = "6" Then    ' show row #6
            Rows((Target.Row + 4) & ":" & (Target.Row + 9)).EntireRow.Hidden = False

        ElseIf Range("SRUAdd").Value = "7" Then    ' show row #7
            Rows((Target.Row + 4) & ":" & (Target.Row + 10)).EntireRow.Hidden = False

        ElseIf Range("SRUAdd").Value = "8" Then    ' show row #8
            Rows((Target.Row + 4) & ":" & (Target.Row + 11)).EntireRow.Hidden = False

        ElseIf Range("SRUAdd").Value = "9" Then    ' show row #9
            Rows((Target.Row + 4) & ":" & (Target.Row + 12)).EntireRow.Hidden = False 

        ElseIf Range("SRUAdd").Value = "10" Then    ' show row #10
            Rows((Target.Row + 4) & ":" & (Target.Row + 13)).EntireRow.Hidden = False 
        End If
    End If

预期结果是我想根据从下拉列表中选择的数字显示和隐藏正确的行。当前结果是根据下拉选择仅显示正确的行。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    逻辑是隐藏所有内容,然后取消隐藏相关行。实际上你不需要条件If Range("SRUAdd").Value = "0" Then。直接从If Range("SRUAdd").Value = "1" Then开始。你也可以使用Select Case

    这是您正在尝试的(未经测试)吗?

    Dim sRow As Long, toRow As Long
    
    If Target.Address = Range("SRUAdd").Address Then
        Rows((Target.Row + 4) & ":" & (Target.Row + 13)).EntireRow.Hidden = True
    
        sRow = Target.Row + 2
    
        Select Case Range("SRUAdd").Value
            Case 1: toRow = Target.Row + 4
            Case 2: toRow = Target.Row + 5
            Case 3: toRow = Target.Row + 6
            Case 4: toRow = Target.Row + 7
            Case 5: toRow = Target.Row + 8
            Case 6: toRow = Target.Row + 9
            Case 7: toRow = Target.Row + 10
            Case 8: toRow = Target.Row + 11
            Case 9: toRow = Target.Row + 12
            Case 10: toRow = Target.Row + 13
        End Select
    
        If toRow <> 0 Then Rows(sRow & ":" & toRow).EntireRow.Hidden = False
    End If
    

    编辑:

    我可以用 Rows((Target.Row + 44) & ":" & (Target.Row + 53)).EntireRow.Hidden = True 代码隐藏第二张表,我不知道如何添加案例部分的额外代码。我已经尝试了一些东西,但它不起作用......我认为“案例 1,案例 2”等与下拉框中选择的数字有关?我已经尝试过案例 1:toRow = Target.Row + 4 + 44 但这不起作用。 – stacson76 3 小时前

    您必须单独处理桌子。看这个。

    Dim sRowTblA As Long, toRowTblA As Long
    Dim sRowTblB As Long, toRowTblB As Long
    
    If Target.Address = Range("SRUAdd").Address Then
        Rows((Target.Row + 4) & ":" & (Target.Row + 13)).EntireRow.Hidden = True
        Rows((Target.Row + 44) & ":" & (Target.Row + 53)).EntireRow.Hidden = True
    
        sRowTblA = Target.Row + 2
        sRowTblB = Target.Row + 44
    
        Select Case Range("SRUAdd").Value
            Case 1
                toRowTblA = Target.Row + 4
                toRowTblB = Target.Row + 44
            Case 2
                toRowTblA = Target.Row + 5
                toRowTblB = Target.Row + 45
            Case 3
                toRowTblA = Target.Row + 6
                toRowTblB = Target.Row + 46
            Case 4
                toRowTblA = Target.Row + 7
                toRowTblB = Target.Row + 47
            '
            '~~> And So on
            '
        End Select
    
        If toRowTblA <> 0 Then Rows(sRowTblA & ":" & toRowTblA).EntireRow.Hidden = False
        If toRowTblB <> 0 Then Rows(sRowTblB & ":" & toRowTblB).EntireRow.Hidden = False
    End If
    

    【讨论】:

    • 是的,成功了,谢谢!我在页面下方也有同一张桌子,这是这张桌子的镜像。如何将此添加到代码中,以便在选择 nbr 1 时在两个表中选择第 1 行?
    • 只需添加更多代码。例如,在Rows((Target.Row + 4) &amp; ":" &amp; (Target.Row + 13)).EntireRow.Hidden = True 下方再添加一行。有更改+4+13。分别更改Select Case中的其他值
    • 我可以用Rows((Target.Row + 44) &amp; ":" &amp; (Target.Row + 53)).EntireRow.Hidden = True 代码隐藏第二个表,我不知道如何将额外的代码添加到案例部分。我已经尝试了一些东西,但它不起作用......我认为“案例 1,案例 2”等与下拉框中选择的数字有关?我试过Case 1: toRow = Target.Row + 4 + 44 但这不起作用。
    • 我没想到会这样做,非常感谢 - 它现在按预期工作!感谢您与我分享,非常感谢。
    猜你喜欢
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    相关资源
    最近更新 更多