我正在尝试在Excel 2016中创建一个宏,该宏根据包含在不同单元格中的下拉列表自动显示/隐藏列。下拉(在单元格“K7”中)当前正在使用Excel的数据验证,在不同的工作表中引用几千个单元格(即文本)的范围。
这是我当前的代码(感谢Busse!),我知道它没有自动显示/隐藏功能,可以根据用户在单元格“K7”中选择的内容即时显示/隐藏:
Sub Hide_Columns_Containing_Value()
Dim c As Range
For Each c In Range("R3:GJU3").Cells
If c.Value Range("K7").Value Then
Columns(c.Column).EntireColumn.Hidden = False
End If
Next c
End Sub
感谢您的帮助!
答案 0 :(得分:2)
在工作表中添加Worksheet_Change
个事件。如果只想显示第3行中的值与K7匹配的列,则可以简化一点(不需要If
语句)。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim R, V
If Target.Address = ("$K$7") Then
V = [K7].Value
For Each R In Range("R3:GJU3")
R.EntireColumn.Hidden = R.Value <> V
Next
End If
End Sub
请注意,要获得列范围,您可以编写Columns(R.Column)
或R.EntireColumn
。
如果R3:GJU3范围内可能存在错误,请改用它。 在这里,如果出现错误,则会隐藏该列,但可以显示该列。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim R, V
If Target.Address = ("$K$7") Then
V = [K7].Value
For Each R In Range("R3:GJU3")
If IsError(R.Value) Then
R.EntireColumn.Hidden = True
Else
R.EntireColumn.Hidden = R.Value <> V
End If
Next
End If
End Sub