excel - 根据后续条件显示或隐藏行

标签 excel vba

对此非常陌生,因此为我的无知道歉。希望这能解释清楚。

我根据第 1 周到第 5 周的下拉列表拼凑了一些当前隐藏或显示一系列单元格的代码(即,如果选择第 1 周,则第 2-5 周被隐藏,只有第 1 周的单元格显示) .然后在每周内,我有一个随后的下拉选择选项来显示给定周的行,从 1 到 30 行。

因此,选择一个周数来显示相关行,然后选择一个数字来选择给定周显示的行数。

The problem I'm having is that when a given week is selected, all 30 rows for that week are shown again even if previously the user selected to show only rows 1-15.

我了解这是因为选择一周时,只有检查语句,并且随后的语句不会再运行,但是我不知道如何重新安排以确保保持后续选择。

我希望每周只显示用户之前定义的行数,因此您可以在几周之间切换并只查看之前选择的内容。

IE。如果用户选择第 1 周的第 1-15 行,切换到第 2 周,然后返回第 1 周,我只希望第 1-15 行显示在第 1 周,而不是全部 30 行。

下面是“第 1 周”的示例,该子程序使用类似的代码持续第 2-5 周。

'

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = Range("SELECT_WEEK_FEB").Address Then
        If Target.Value = "Week 1" Then
            Range("WEEK_1_FEB").EntireRow.Hidden = False
            Range("WEEK_2_FEB, WEEK_3_FEB, WEEK_4_FEB, WEEK_5_FEB").EntireRow.Hidden = True
        ElseIf Target.Value = "Week 2" Then
            Range("WEEK_2_FEB").EntireRow.Hidden = False
            Range("WEEK_1_FEB, WEEK_3_FEB, WEEK_4_FEB, WEEK_5_FEB").EntireRow.Hidden = True
        ElseIf Target.Value = "Week 3" Then
            Range("WEEK_3_FEB").EntireRow.Hidden = False
            Range("WEEK_1_FEB, WEEK_2_FEB, WEEK_4_FEB, WEEK_5_FEB").EntireRow.Hidden = True
        ElseIf Target.Value = "Week 4" Then
            Range("WEEK_4_FEB").EntireRow.Hidden = False
            Range("WEEK_1_FEB, WEEK_2_FEB, WEEK_3_FEB, WEEK_5_FEB").EntireRow.Hidden = True
        ElseIf Target.Value = "Week 5" Then
            Range("WEEK_5_FEB").EntireRow.Hidden = False
            Range("WEEK_1_FEB, WEEK_2_FEB, WEEK_3_FEB, WEEK_4_FEB").EntireRow.Hidden = True

        End If
    End If

     '------------------------------------------------------------------------------------------------------
     ' WEEK 1
 If Target.Address = Range("Week_1_Items_Feb").Address Then
        If Target.Value = "1-15" Then
            Range("Feb_Week_1_1_to_15").EntireRow.Hidden = False
            Range("Feb_Week_1_16_to_20, Feb_Week_1_21_to_25,Feb_Week_1_26_to_30").EntireRow.Hidden = True
        ElseIf Target.Value = "16-20" Then
            Range("Feb_Week_1_1_to_15, Feb_Week_1_16_to_20").EntireRow.Hidden = False
            Range("Feb_Week_1_21_to_25, Feb_Week_1_26_to_30").EntireRow.Hidden = True
        ElseIf Target.Value = "21-25" Then
            Range("Feb_Week_1_1_to_15, Feb_Week_1_16_to_20, Feb_Week_1_21_to_25").EntireRow.Hidden = False
            Range("Feb_Week_1_26_to_30").EntireRow.Hidden = True
         ElseIf Target.Value = "26-30" Then
            Range("Feb_Week_1_1_to_15, Feb_Week_1_16_to_20, Feb_Week_1_21_to_25, Feb_Week_1_26_to_30").EntireRow.Hidden = False
        End If
    End If'

最佳答案

如果您将所有周的范围一起定义为“All_Week”,那么代码将很短。然后,您可以通过在每个 if 条件中添加一行来链接这两个条件。
如果将“All”添加到“Week_1_Items_Feb”,那么您可以看到给定“SELECT_WEEK_FEB”的所有行。

另外,我注意到,您需要累积“Week_1_Items_Feb”。因此,对于 16-20,您需要 1-20 输出。然后,我建议 - 而不是将其提及为 16-20,您可以在下拉列表中提及 1-20。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = Range("SELECT_WEEK_FEB").Address Then
        Range("All_Week").EntireRow.Hidden = True
        If Range("Week_1_Items_Feb").Value = "All" Then
        Range(Target.Value).EntireRow.Hidden = False
        Else
        Range(Target.Value).Rows(Replace(Range("Week_1_Items_Feb").Value, "-", ":")).EntireRow.Hidden = False
        End If
    End If

     '------------------------------------------------------------------------------------------------------
     ' WEEK 1

    If Target.Address = Range("Week_1_Items_Feb").Address Then
        Range("All_Week").EntireRow.Hidden = True
        If Target.Value = "All" Then
        Range(Range("SELECT_WEEK_FEB").Value).EntireRow.Hidden = False
        Else
        Range(Range("SELECT_WEEK_FEB").Value).Rows(Replace(Target.Value, "-", ":")).EntireRow.Hidden = False
        End If
    End If
End Sub

enter image description here

关于excel - 根据后续条件显示或隐藏行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60984011/

相关文章:

vba - 从一个工作表复制数据并粘贴到另一工作表中的相关行

python - 试图在python中打开excel文件并出现错误

动态创建总和范围的 Excel 公式出错 "a value used in the formula is of the wrong data type"

excel - 在vba中将颜色设置为评论的字符

excel - 交换 x 和 y 轴,无需手动交换值

excel - VBA - 创建 n × m 矩阵的函数

excel - 在上面添加一个新行,同时为新行的第一个和最后一个单元格添加后缀

vba - 编译错误: Constant expression required

objective-c - 在 Apple Swift 中解析 Excel 数据

excel - 我想在打开 excel 文件时自动运行我的宏