Excel 如果范围中的任何单元格符合条件,则尝试取消隐藏其他列
我的电子表格中有重复的行,用于手动验证数据。列“I”包含一个通过数据验证的下拉列表,有3个选项。我试图隐藏另一列“K”,除非从下拉列表中选择了选项“N/A”(罕见)的情况Excel 如果范围中的任何单元格符合条件,则尝试取消隐藏其他列,excel,if-statement,vba,Excel,If Statement,Vba,我的电子表格中有重复的行,用于手动验证数据。列“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 Ac
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
我的代码可能有点粗糙,但当选择了正确的条件时,它至少会取消隐藏该列。我的问题是,如果给另一个单元格一个不需要额外列的选择,它会再次隐藏该列。我错过了什么?是否有一个函数允许以下内容:
'如果在范围内,则'尝试添加我的AnyNA函数。它贯穿整个列以检查N/A,并且在找到任何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
尝试添加我的AnyNA函数。它贯穿整个列以检查N/A,并且在找到任何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
在@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
在@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
您指的是文本常量
N/a
还是工作表错误#N/a
?哪些单元格范围应更改列的可见性?列I中的任何内容或列I中的特定单元格?您可能希望尝试如果IsError(目标)那么
而不是您拥有的内容。或者尝试如果Target.Value=“#N/A”,则在数据验证下拉框中实际选择“N/A”。K4:K54是提供下拉列表的单元格。整个专栏我应该是可见的@Jeepad您指的是文本常量N/a
还是工作表错误#N/a
?哪些单元格范围应更改列的可见性?列I中的任何内容或列I中的特定单元格?您可能希望尝试如果IsError(目标)那么
而不是您拥有的内容。或者尝试如果Target.Value=“#N/A”,则在数据验证下拉框中实际选择“N/A”。K4:K54是提供下拉列表的单元格。整个专栏我应该是可见的@JeepedI可以遵循这里的逻辑,但是我在语法方面遇到了问题。我是VBA新手,所以这可能很简单。我在'Unhide()''Hide()'和'Private Function AnyNA()As Boolean'上遇到语法错误@Sean ScottN/m我通过将()从调用行中移除并更正端到端函数来更正此错误。现在,当在列“I”中选择“N/A”时,它正确地取消隐藏该列,但当我转到下一行时,无论我选择什么,它都会再次隐藏列“K”。我想是这样的。现在它正确地取消隐藏,但如果单元格调整为远离“N/A”,则不会重新隐藏。我修复了我的答案。我在AnyNA中也使用了不正确的语法。因为我没有调用Exit函数,所以它总是返回False。我还忘了将选中的列切换到“J”。现在试试,我可以按照这里的逻辑来做,但是语法有问题。我是VBA新手,所以这可能很简单。我在'Unhide()''Hide()'和'Private Function AnyNA()As Boolean'上遇到语法错误@Sean ScottN/m我通过将()从调用行中移除并更正端到端函数来更正此错误。现在,当在列“I”中选择“N/A”时,它正确地取消隐藏该列,但当我转到下一行时,无论我选择什么,它都会再次隐藏列“K”。我想是这样的。现在它正确地取消隐藏,但如果单元格调整为远离“N/A”,则不会重新隐藏。我修复了我的答案。我在AnyNA中也使用了不正确的语法。因为我没有调用Exit函数,所以它总是返回False。我还忘了将选中的列切换到“J”。现在试试