Excel 基于下拉列表数字选择隐藏/显示行

Excel 基于下拉列表数字选择隐藏/显示行,excel,vba,Excel,Vba,我有一个下拉列表,其中有数字0到10。零隐藏第1行到第10行,1仅显示第1行,2仅显示第1行和第2行,依此类推到nbr 10。这是预期的工作,我可以从nbr 1上升到10,并显示所有正确的行数 例如,如果我选择了第5行,然后选择了第2行,我就不能隐藏第5到第3行 我是VBA新手,如果我添加另一行,将相同的nbr设置为EntireRow.Hidden=true,我想不出该怎么做,原因很明显,这不起作用,因为相同的数字有冲突的操作。有人能帮我吗 If Target.Address = Range("

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

例如,如果我选择了第5行,然后选择了第2行,我就不能隐藏第5到第3行

我是VBA新手,如果我添加另一行,将相同的nbr设置为EntireRow.Hidden=true,我想不出该怎么做,原因很明显,这不起作用,因为相同的数字有冲突的操作。有人能帮我吗

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

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

逻辑是隐藏所有内容,然后取消隐藏相关行。实际上,如果范围(“SRUAdd”).Value=“0”,则不需要条件
。如果范围(“SRUAdd”).Value=“1”那么直接从
开始。您也可以使用
选择案例

这就是你正在尝试的(未经测试的)吗

Dim sRow As Long,toRow As Long
如果Target.Address=Range(“SRUAdd”).Address,则
行((Target.Row+4)&):“&(Target.Row+13)).EntireRow.Hidden=True
sRow=目标行+2
选择案例范围(“SRUAdd”)。值
案例1:toRow=Target.Row+4
案例2:toRow=Target.Row+5
案例3:toRow=Target.Row+6
案例4:toRow=Target.Row+7
案例5:toRow=Target.Row+8
案例6:toRow=Target.Row+9
案例7:toRow=Target.Row+10
案例8:toRow=Target.Row+11
案例9:toRow=Target.Row+12
案例10:toRow=Target.Row+13
结束选择
如果toRow为0,则为行(sRow&“:”&toRow)。EntireRow.Hidden=False
如果结束
编辑:


我可以用行((Target.Row+44)&“&(Target.Row+53)).EntireRow.Hidden=True代码隐藏第二个表,我不知道如何将额外的代码添加到case部分。我试过一些方法,但不起作用。。。我认为“案例1、案例2”等与下拉框中选择的数字有关?我尝试过案例1:toRow=Target.Row+4+44,但这不起作用Stacson 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
Dim sRowTblA为长,toRowTblA为长
尺寸sRowTblB为长,TOROWTBB为长
如果Target.Address=Range(“SRUAdd”).Address,则
行((Target.Row+4)&):“&(Target.Row+13)).EntireRow.Hidden=True
行((Target.Row+44)&):“&(Target.Row+53)).EntireRow.Hidden=True
sRowTblA=Target.Row+2
sRowTblB=目标行+44
选择案例范围(“SRUAdd”)。值
案例1
toRowTblA=目标行+4
toRowTblB=目标行+44
案例2
toRowTblA=目标行+5
toRowTblB=目标行+45
案例3
toRowTblA=目标行+6
toRowTblB=目标行+46
案例4
toRowTblA=目标行+7
toRowTblB=目标行+47
'
“~~>等等
'
结束选择
如果toRowTblA为0,则为行(sRowTblA&“:”&toRowTblA)。EntireRow.Hidden=False
如果toRowTblB为0,则为行(sRowTblB&“:”&toRowTblB)。EntireRow.Hidden=False
如果结束

逻辑是隐藏所有内容,然后取消隐藏相关行。实际上,如果范围(“SRUAdd”).Value=“0”,则不需要条件
。如果范围(“SRUAdd”).Value=“1”那么直接从
开始。您也可以使用
选择案例

这就是你正在尝试的(未经测试的)吗

Dim sRow As Long,toRow As Long
如果Target.Address=Range(“SRUAdd”).Address,则
行((Target.Row+4)&):“&(Target.Row+13)).EntireRow.Hidden=True
sRow=目标行+2
选择案例范围(“SRUAdd”)。值
案例1:toRow=Target.Row+4
案例2:toRow=Target.Row+5
案例3:toRow=Target.Row+6
案例4:toRow=Target.Row+7
案例5:toRow=Target.Row+8
案例6:toRow=Target.Row+9
案例7:toRow=Target.Row+10
案例8:toRow=Target.Row+11
案例9:toRow=Target.Row+12
案例10:toRow=Target.Row+13
结束选择
如果toRow为0,则为行(sRow&“:”&toRow)。EntireRow.Hidden=False
如果结束
编辑:


我可以用行((Target.Row+44)&“&(Target.Row+53)).EntireRow.Hidden=True代码隐藏第二个表,我不知道如何将额外的代码添加到case部分。我试过一些方法,但不起作用。。。我认为“案例1、案例2”等与下拉框中选择的数字有关?我尝试过案例1:toRow=Target.Row+4+44,但这不起作用Stacson 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
Dim sRowTblA为长,toRowTblA为长
尺寸sRowTblB为长,TOROWTBB为长
如果Target.Address=Range(“SRUAdd”).Address,则
行((Target.Row+4)&):“&(Target.Row+13)).EntireRow.Hidden=True
行((Target.Row+44)&):“&(Target.Row+53)).EntireRow.Hidden=True
sRowTblA=Target.Row+2
sRowTblB=目标行+44
选择案例范围(“SRUAdd”)。值
案例1
toRowTblA=目标行+4
toRowTblB=目标行+44
案例2
toRowTblA=目标行+5
toRowTblB=目标行+45
案例3
toRowTblA=目标行+6
toRowTblB=目标行+46
案例4
toRowTblA=目标行+7
toRowTblB=目标行+47
'
“~~>等等
'
结束选择
如果toRowTblA为0,则为行(sRowTblA&“:”&toRowTblA)。EntireRow.Hidden=False
如果toRowTblB为0,则为行(sRowTblB&“:”&toRowTblB)。EntireRow.Hidden=False
如果结束