【问题标题】:Hide columns containing cells with certain values via Excel VBA button通过 Excel VBA 按钮隐藏包含具有特定值的单元格的列
【发布时间】:2016-02-23 19:16:37
【问题描述】:

我有一个电子表格,其中包含与 2015 年至 2020 年周一至周六日期相关的列。当我打印这张表时,我只想看到“星期一”栏,而不是星期二至星期六。第 14 行包含日期 (dd/mm),第 15 行包含星期几(例如,“M”代表星期一,“T”代表星期二,等等)。我希望能够在隐藏所有非星期一列和查看所有列之间切换。下面的 VBA 按钮代码给了我“运行时错误 '13' - 类型不匹配”。这个按钮有一个简单的修复方法,还是有更好的方法来完成这个?

Private Sub CommandButton1_Click()
    Dim i As Long
    For i = 11 To 222
        If Cells(14, i).Value = "T" Or "W" Or "R" Or "F" Or "S" Then
            Columns(i).EntireColumn.Hidden = True
        Else
            Columns(i).EntireColumn.Hidden = False
        End If
    Next i
End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您的代码很接近,但 IF ... OR ... OR 语法已关闭。您的OR 条件是独立的,它们必须包含一个计算结果为TrueFalse 的表达式。

    因此,它应该改为:

    If Cells(14, i).Value = "T" Or Cells(14, i).Value = "W" Or Cells(14, i).Value = "R" Or Cells(14, i).Value = "F" Or Cells(14, i).Value = "S" Then
    

    诚然,这更麻烦,但它应该可以解决问题。

    由于您要查找的值是单个字符,因此您可以在这里作弊并使用INSTR()

    If Instr(1, "TWRFS", Cells(14,i).value) > 0 Then
    

    因此,如果您的单元格的值在该字符串中的工作日字母,那么......做任何事情

    【讨论】:

    • .Hidden 是正确的。 .Visible 不是范围的属性。
    • 优秀。繁琐的语法是我想要的 - 谢谢!也与上述相同的问题 - If 语句中的 > 0 必须只是是/否或真/假响应?抱歉 - 我曾短暂使用过 MatLab,但除此之外,这是我第一次尝试任何类型的编码。
    • 是的,IF 需要TRUEFALSE 才能运行。 INSTR() 返回一个数字,该数字可以在字符串中找到。因此,如果它大于 0,则该字符在字符串中,IF 得到一个TRUE。之前的OR 语句最终会返回类似TRUE OR FALSE OR FALSE OR FALSE OR FALSE 的内容,即TRUE 所以IF 也很高兴。
    【解决方案2】:

    您的叙述与您的代码所讲述的故事不同。描述将 M、T、W、Th、F、Sa、Su 放在第 15 行,但代码在第 14 行。

    无论如何,我正在根据我希望第 14 行中的实际日期确定数字 Weekday function

    Private Sub CommandButton1_Click()
        Dim i As Long
        For i = 11 To 222
            If Weekday(Cells(14, i).Value, vbMonday) > 1 Then
                Columns(i).EntireColumn.Hidden = _
                    Not Columns(i).EntireColumn.Hidden
            End If
        Next i
    End Sub
    

    要打开或关闭某项功能,只需反转其布尔值即可。

    【讨论】:

    • 是的 - 它应该是第 15 行。这解决了我的问题,但你能解释一下 If 语句中的 > 1 语法吗?
    • 您是否单击了我为 WEEKDAY function 提供给 MSDN 文档的链接?这很简单。我很乐意澄清您不理解的任何具体内容,但我通常不会重写 cmets 中的文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 2015-02-10
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多