【问题标题】:Hide columns based on user input根据用户输入隐藏列
【发布时间】:2022-11-15 21:24:40
【问题描述】:

我正在尝试为 20 名员工制定 2 年的计划。 在这里我想隐藏输入中已经过去的周数。

下面是我走了多远。经过测试,它似乎可以工作到“全部”部分,但无法弄清楚最后一部分。使用输入框,我希望此人能够根据第一行输入值,即 2023 年第 1 周 (20231) 到 2024 年第 52 周 (202452)。

我的目标是,如果有人输入 202336 的值,它应该显示 2023 第 36 周及以后,并隐藏前几周。

有人可以帮助我吗?提前致谢!

Sub Hidepastweeks()
    Dim myValue As Variant
    myValue = InputBox("Weeks visible from week:", "Visable weeks")
    Dim c As Range
    
    Range("A2").Value = myValue
    With Range("G1:DF1")
        Application.ScreenUpdating = False
        .EntireColumn.Hidden = (myValue <> "All")
        If myValue <> "All" Then
            For Each c In Range("G1:DF1").Cells
                If c.Value < "myValue" Then
                    c.EntireColumn.Hidden = True
                End If
            Next
        End If
        Application.ScreenUpdating = True
    End With
End Sub

我尝试了不同的站点,但它们似乎都有一个等于公式而不是小于那个公式。

【问题讨论】:

  • 目的是什么隐藏专栏?您是否尝试查看 > 冻结窗格?

标签: excel vba


【解决方案1】:

匹配前隐藏列 (Application.Match)

Sub HidePastWeeks()
    
    Dim myValue As Variant
    myValue = InputBox("Weeks visible from week:", "Visible weeks")
    
    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    ws.Range("A2").Value = myValue
    
    Dim srg As Range: Set srg = ws.Range("G1:DF1")
    
    Application.ScreenUpdating = False
        
    ' allow case-insensitivity with 'vbTextCompare' i.e. 'all = ALL'.
    srg.EntireColumn.Hidden = StrComp(myValue, "All", vbTextCompare) <> 0
    
    Dim cIndex As Variant ' could be an error value
    
    If myValue <> "All" Then
        cIndex = Application.Match(myValue, srg, 0)
        If IsNumeric(cIndex) Then ' show
            srg.Resize(, srg.Columns.Count - cIndex + 1) _
                .Offset(, cIndex - 1).EntireColumn.Hidden = False
        'Else ' show none: the perfect spot for an annoying message box
        End If
    'Else ' show all
    End If
    
    Application.ScreenUpdating = True

End Sub

【讨论】:

    【解决方案2】:

    如果您将 myValue 周围的报价去掉,它可能会按原样工作

    如果 c.Value < "myValue" 则

    写的周数是否与您从用户输入中请求的相同,例如202336 在 CG1(或其他)中?如果没有,您必须使用调整才能与 myValue 进行比较。

    【讨论】:

    • 感谢@notus_Panda 的快速回复,for 列确实是 202336,所以这都是一样的。我也尝试过不带引号,但效果不佳。没有引号,所有行(G 到 DF)都被隐藏。
    猜你喜欢
    • 1970-01-01
    • 2017-06-27
    • 2013-07-22
    • 2018-10-30
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多