繁体   English   中英

Excel VBA-隐藏/取消隐藏“ na”列

[英]Excel VBA - hide/unhide “na” columns

首先,我想让您知道VBA的新功能。 我可以根据需要复制和粘贴某些数据并调整范围,仅此而已。 现在我的问题:

我有31列(E27:AI27)组成的行。 这个范围内的所有单元格都从该范围外的其他单元格获取输入(从1-31的数字),比方说从几个下拉列表中获取。 根据我下拉的方式,这些下拉列表列出了该特定范围内的数字顺序(E27:AI27)可能类似于以下替代方法:

Alt。 01:1 2 3 4 5 ................................ 29 30 31(总共31个单元格)

Alt。 02:2 3 4 5 6 .................................... 29 30 31 na(总共31个单元格)

Alt。 03:3 4 5 6 7 .................................... 30 31 na na(总共31个单元格)

Alt。 04:4 5 6 7 8 ...................... 30 31 na na na(总共31个单元格)

等等等等

Alt。 30:30 31 na ...................... na na na na na(总共31个单元格)

Alt。 31:31 na na ........................... na na na na na(总共31个单元格)

现在,我要做的是自动地,暂时地隐藏其中包含字符串“ na”的那些列。 然后,当我再次重新更改下拉列表时,我希望能够取消隐藏从“ na”变为数字的那些列。 例如,我希望能够在备选方案1和备选方案2之间切换(请参见上文),以了解我如何下拉列表。 在这两种选择之间切换意味着AI27从显示,隐藏,显示,隐藏等等(而E27AH27都将显示,因为它们内部都有1-30的数字)。

最后但并非最不重要的一点是,有两个下拉列表控制着单元格E27:AI27的值。 下拉列表称为月(C18)和下拉列表称为日(D18)。 前者(C18)将日期设置为一个月。 如果C18 = February,那么将有28天,最后两列(AH:AI)为“ na”。 除了后面的下拉列表(D18)设置开始日期外,还命名序列中的第一个数字(在单元格E27中)。 如果D18 = 21,那么二月份的替代方案将是:

21 22 23 24 25 26 27 28 na na na na na na na na na na na na ....(包含23 na)

如果可能的话,有人可以帮我建立一个简单且简短的VBA代码吗? 高度赞赏

试试这个:

Private Sub Worksheet_Change(ByVal Target As Range)
    'change the "E23" with the cell with your dropdown
    If Not Intersect(Target, Range("E23")) Is Nothing Then
        Call UnhideHideColumns
    End If
End Sub

Sub UnhideHideColumns()

Dim bytColumnCheck As Byte
Dim blnNeedToUnhide As Boolean
Dim intFirstNAColumn As Integer

'check all columns and find out if they are already hidden
For bytColumnCheck = 5 To 35
    'if any of the columns is hidden, unhide all the columns to the right and exit loop
    If Cells(1, bytColumnCheck).EntireColumn.Hidden = True Then
        Range(Cells(1, bytColumnCheck), Cells(1, 35)).EntireColumn.Hidden = False
        Exit For
    End If
Next bytColumnCheck

'find first occurence of "na" in values, if any exists
If Not Cells.Find("na", LookIn:=xlValues, after:=Range("E27")) Is Nothing Then
    intFirstNAColumn = Cells.Find("na", LookIn:=xlValues).Column

    'now hide the columns to the right of the first "NA", including
    Range(Cells(1, intFirstNAColumn), Cells(1, 35)).EntireColumn.Hidden = True
End If

End Sub

请注意,每次具有下拉菜单的单元格发生更改时,都会Call UnhideHideColumns ,甚至可以说是从Set1到Set1,或者从5到5。所以它可以经常触发不必要的宏。

这为我工作:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim i As Integer
    For i = 9 To 40: Cells(28, i).EntireColumn.Hidden = Cells(28, i) = "na": Next

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM