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