对此非常陌生,因此为我的无知道歉。希望这能解释清楚。
我根据第 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
关于excel - 根据后续条件显示或隐藏行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60984011/