Vba 根据数据输入的单元格值取消隐藏行-刷新错误

Vba 根据数据输入的单元格值取消隐藏行-刷新错误,vba,excel,Vba,Excel,我已经设置了一个工作表,允许用户从单元格(B23)中的数据验证列表中选择预设选项。然后,用户对这一单元格的选择将触发取消隐藏某些行,从而引导用户仅将数据输入到适当的行中。我用于取消隐藏相应行的VBA代码运行良好,除了用户在其中一个未隐藏行中输入数据时,所有行都将隐藏。然后,用户需要从初始数据验证列表(单元格B23)中重新选择他们的选项,以再次取消隐藏相应的行。他们输入的值将被输入并保存在单元格中,但他们需要在每个数据输入步骤之间重新选择初始选项,这很烦人,我想解决这个问题 我怀疑: 1) 我纠结

我已经设置了一个工作表,允许用户从单元格(B23)中的数据验证列表中选择预设选项。然后,用户对这一单元格的选择将触发取消隐藏某些行,从而引导用户仅将数据输入到适当的行中。我用于取消隐藏相应行的VBA代码运行良好,除了用户在其中一个未隐藏行中输入数据时,所有行都将隐藏。然后,用户需要从初始数据验证列表(单元格B23)中重新选择他们的选项,以再次取消隐藏相应的行。他们输入的值将被输入并保存在单元格中,但他们需要在每个数据输入步骤之间重新选择初始选项,这很烦人,我想解决这个问题

我怀疑: 1) 我纠结在一起的VBA代码并不能解释用户将数据输入到隐藏的行/将触发取消隐藏的行和/或 2) 问题的关键在于使用数据验证列表(B23)刷新单元格,该列表触发要取消隐藏的行。不幸的是,我不知道怎么做

任何帮助都将不胜感激

下面是隐藏行的VBA代码

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim allRows As Range

Set allRows = Rows("27:64")
allRows.Hidden = True

If Not Intersect(Target, Range("B23")) Is Nothing Then
    If Target.Value = "A1" Then
        Rows("27:31").Hidden = False
    ElseIf (Target.Value = "A10-A-S" Or Target.Value = "A10-A-P" Or Target.Value = "A10-A-T") Then
        Rows("32:36").Hidden = False
    ElseIf (Target.Value = "A10-B-S" Or Target.Value = "A10-B-P" Or Target.Value = "A10-B-T") Then
        Rows("37:44").Hidden = False
    ElseIf (Target.Value = "E19S" Or Target.Value = "E19P" Or Target.Value = "E19T") Then
        Rows("46:54").Hidden = False
    ElseIf (Target.Value = "E20S" Or Target.Value = "E20P" Or Target.Value = "E20T") Then
        Rows("56:64").Hidden = False
    End If
End If

End Sub

你应该检查目标是否是B23,如果不是退出潜艇。可能是这样的

   If Intersect(Target, Range("B23")) Is Nothing Then
      Exit Sub
   End If

您是对的,只要有人更改工作表上的任何内容,
worksheet\u Change
事件就会触发并隐藏这些行

一个简单的选择可能是将该代码包装在一个检查周围,检查更改是否由下拉菜单触发:

With Target
    If .Count = 1 Then
        If .Row = 23 And .Column = 2 Then ' Assumes your list result is B23?
           allRows.Hidden = True
           ' do your other checks and updates here...
        End If    
    End If
End With