通过Excel VBA按钮隐藏包含特定值单元格的列

通过Excel VBA按钮隐藏包含特定值单元格的列,excel,vba,Excel,Vba,我有一个电子表格,其中列有2015-2020年星期一至星期六的日期。当我打印这张纸时,我只想看到“星期一”列,而不是星期二和星期六。第14行有日期(dd/mm),第15行有一周中的某一天(例如,“M”表示星期一,“T”表示星期二等)。我希望能够在隐藏所有非周一专栏和查看所有专栏之间切换。下面的VBA按钮代码告诉我“运行时错误'13'-类型不匹配”。是否有一个简单的修复此按钮的方法,或者有更好的方法来完成此操作 Private Sub CommandButton1_Click() Dim

我有一个电子表格,其中列有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

你的代码很接近,但如果。。。或或语法处于禁用状态。您的
条件是独立的,它们必须包含一个计算结果为
True
False
的表达式

因此,应该改为:

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()


所以如果你的单元格的值在那一串工作日字母中,那么。。。做任何事

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

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
在任何情况下,我都是根据第14行中的实际日期来确定数字

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

要打开或关闭某个对象,只需反转其布尔值。

。这里的隐藏值是正确的
.Visible
不是范围的属性。非常好。繁琐的语法正是我想要的-谢谢!还有与上面相同的问题-If语句中的>0必须是Yes/No或True/False响应?抱歉-我已经简单地使用了MatLab,但除此之外,这是我第一次尝试任何类型的编码。是的,
IF
需要
TRUE
FALSE
来操作
INSTR()
返回可以在字符串中找到字符的数字。因此,如果大于0,则字符位于字符串中,
if
将获得一个
TRUE
。前面的
语句将返回类似
真或假或假或假
的内容,即
,因此
如果
也很高兴。是的-应该是第15行。这解决了我的问题,但是您能解释一下If语句中的>1语法吗?您是否单击了我提供给MSDN文档的链接?这很简单。我很乐意澄清您不理解的任何具体内容,但我通常不会在注释中重写文档。