根据数据input的单元值取消隐藏行 – 刷新错误

我已经设置了一个工作表,允许用户从单元格中的数据validation列表中select预设选项(B23)。 用户selectclosures这个单元格将触发某些行被隐藏,引导用户将数据input到恰当的行中。 我用来取消隐藏适当的行的VBA代码工作正常,除了每当用户input数据到一个非隐藏的行,所有的行将隐藏。 然后用户需要从初始数据validation列表(单元格B23)中重新select它们的选项以再次取消隐藏相应的行。 他们input的值被input并保存在单元格中,但是他们需要在每个数据input步骤之间重新select它们的初始select,这是烦人的,我想要修复的。

我怀疑:1)我蹒跚在一起的VBA代码没有考虑到这样的事实,即用户将数据input到隐藏/将被触发取消隐藏的行中,和/或2)问题的症结是刷新单元格与数据validation列表(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-AS" Or Target.Value = "A10-AP" Or Target.Value = "A10-AT") Then Rows("32:36").Hidden = False ElseIf (Target.Value = "A10-BS" Or Target.Value = "A10-BP" Or Target.Value = "A10-BT") 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 

你说得对,只要有人改变工作表上的任何东西Worksheet_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 

你应该检查目标是B23,如果不是Exit Sub。 也许是这样的。

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