这给了我很多的乐趣。所有这些隐藏的列都很棘手。但现在轮到你了。请按照说明进行操作。
在您的“命令”表中,找到一个空白栏,进入“显示所有”的细胞之一,此功能在下面的单元格:
="Show "& B5
我更喜欢你拥有所有的12在B5:B16的月份,但是如果你只有一月到三月,或者喜欢随时更改动态内容。只要您在B列中有相关数据(月份名称或列标题),就可以将公式向下复制。给我刚刚描述的名称范围。我给它起了名字“DropdownList”。确保指定的范围具有“工作簿”的“范围”(即,从工作簿的所有部分都可以看到)。
在位置A4的GRA_New表上放置一个命令按钮。也许你在别处已经有了一个按钮。在这种情况下,我会请你一起玩,然后再做一个。稍后,您可以将此按钮移动到任何其他位置,包括其他工作表,但不能放在可能隐藏的列中。该命令按钮将成为验证下拉列表。输入
"Allow" = List and
"Source" =DropdownList (including the = mark.
您现在应该有一个显示“全部显示”,在第一位置的验证下拉列表中,“展1月。”排在第二,而更多的“展......”这取决于命名范围下拉列表的大小。确保在“显示一月”和“显示全部”之间有一个空格,不多也不少,每行包含2个单词,其中第二个单词是相关的。
现在将以下过程添加到“GR_New ...”工作表的代码表中。
Private Sub Worksheet_Change(ByVal Target As Range)
'17 Mar 2017
If Target.Address = Range("A4").Address Then
SetDisplay_GRA_NewGen Split(Target.Value)(1)
End If
End Sub
在此过程中,请将引用更改为“A4”到您有验证下拉列表的单元格。
下一个过程进入正常的代码模块。默认情况下它的名字是“Module1”,但你可以给它任何你喜欢的名字。
Sub SetDisplay_GRA_NewGen(ByVal Cmd As String)
' 17 Mar 2017
Dim Spike As String
Dim CountHidden As Integer
Dim FirstColumn As Long, LastColumn As Long
Dim CapRow As Long, Cap As String
Dim C As Long
CapRow = 4
FirstColumn = 3 ' = column C
With Worksheets("GRA_New_Gen_CI")
LastColumn = .UsedRange.Columns.Count
If StrComp(Cmd, "all", vbTextCompare) Then
With Range("DropdownList")
For C = 2 To .Rows.Count
Cap = Split(.Cells(C).Value)(1)
Spike = Spike & "|" & Cap
Next C
End With
For C = FirstColumn To LastColumn ' count hidden columns
Cap = .Cells(CapRow, C).Value
If .Columns(C).Hidden Then
If .Columns(C).Hidden Or InStr(1, Spike, Cap, vbTextCompare) = 0 Then
' if Cap can't be selected it is counted as not hidden
CountHidden = CountHidden + 1
End If
End If
Next C
Application.ScreenUpdating = False
If CountHidden = 0 Then
' hide all except the specified column
.Range(.Columns(FirstColumn), .Columns(LastColumn)).Hidden = True
End If
For C = FirstColumn To LastColumn
With .Columns(C)
If .Hidden Then
Cap = .Cells(CapRow).Value
If StrComp(Cap, Cmd, vbTextCompare) = 0 Then .Hidden = False
End If
End With
Next C
Else
.Range(.Columns(FirstColumn), .Columns(LastColumn)).Hidden = False
End If
End With
Application.ScreenUpdating = True
End Sub
寻找在此过程中,这两个声明:
CapRow = 4
FirstColumn = 3
第4行就在你的数据表中的行中该程序将寻找月份名称。第3列(=“C”)将成为程序期望找到一个月份名称的第一列。列A:B永远不会被触摸。
现在您的系统已准备就绪。你需要知道如何操作它。 1.当您从下拉列表中选择“全部显示”时,将显示从FirstColumn开始的所有列。称此为重置。 2.当您从CapRow中的该名称的下拉列表中选择任何项目时,将显示。 3.当您选择其他月份时,它将被添加到已经显示的月份中。 4.当所有列已显示时,只显示所选列。
您可以随时修改范围DropdownList,使其更长或更短。重要的是,CapRow中提供了下拉列表中的名称。该程序将它们作为文本进行比较,意思是“全部显示”与“全部显示”相同。
@ Variatus您好,感谢您的分享..但我们想要取消隐藏匹配“一月”和二月“的所有列”。“一月和二月是列的标题......可以在单行中找到( Col C Row 4)。 =) – SANDY