我的电子表格布局有重复的行,用于手动验证数据。专栏" I"包含一个带有3个选项的数据验证下拉列表。我试图保留一个额外的专栏" K"隐藏除非(罕见)情况选项" N / A"从下拉列表中选择。
Private Sub Worksheet_Change(ByVal Target As Range)
If Columns("K").EntireColumn.Hidden = True Then
If Target.Value = "N/A" Then
Act3
Else
Act4
End If
Else
Act4
End If
End Sub
Sub Act3()
Columns("K").EntireColumn.Hidden = False
End Sub
Sub Act4()
Columns("K").EntireColumn.Hidden = True
End Sub
我的代码可能有点粗糙,但是当选择正确的标准时,它至少会取消隐藏列。我的问题是,如果给另一个单元格一个不需要附加列的选择,它会再次隐藏该列。我错过了什么?是否存在允许某些内容的功能:
'如果在范围内有任何'
答案 0 :(得分:0)
尝试添加我的AnyNA功能。它遍历整个列以检查N / A,并且在找不到任何内容时不会隐藏。
似乎你只想考虑隐藏它是否隐藏,反之亦然,所以我为你优化。同时删除了多余的“= True”并将子名称更改为“隐藏”和“取消隐藏”以便清晰。
Private Sub Worksheet_Change(ByVal Target As Range)
If Columns("K").EntireColumn.Hidden And Target.Value = "N/A" Then
Unhide
ElseIf Not Columns("K").EntireColumn.Hidden And Not AnyNA Then
Hide
End If
End Sub
Private Function AnyNA() As Boolean
For Row = 1 To Range("J" & Rows.Count).End(xlUp).Row
If Range("J" & Row).Value = "N/A" Then
AnyNA = True
Exit Function
End If
Next
AnyNA = False
End Function
Sub Unhide()
Columns("K").EntireColumn.Hidden = False
End Sub
Sub Hide()
Columns("K").EntireColumn.Hidden = True
End Sub
答案 1 :(得分:0)
在@Sean Scott的帮助下,我找到了解决方案:
Sub Worksheet_Change(ByVal Target As Range)
If Columns("K").EntireColumn.Hidden Then
If Target.Value = "N/A" Then
UnhideDocs
End If
ElseIf Not Columns("K").EntireColumn.Hidden And Not Target.Value = "N/A" Then
HideDocs
End If
End Sub
Function AnyNA() As Boolean
For Row = 1 To Range("K" & Rows.Count).End(xlUp).Row
If Range("K" & Row).Value = "N/A" Then
AnyNA = True
End If
Next
AnyNA = False
End Function
Sub UnhideDocs()
Columns("K").EntireColumn.Hidden = False
End Sub
Sub HideDocs()
Columns("K").EntireColumn.Hidden = True
End Sub