基于单元格值取消隐藏行以进行数据输入 - 刷新错误

时间:2016-02-08 21:44:31

标签: excel vba excel-vba

我已经设置了一个工作表,允许用户从单元格中的数据验证列表中选择预设选项(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

2 个答案:

答案 0 :(得分:1)

你说得对,只要有人在工作表上更改了任何内容,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

答案 1 :(得分:0)

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

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