Excel VBA:在逐日跟踪程序中隐藏/取消隐藏列,跳过周末列

Excel VBA:在逐日跟踪程序中隐藏/取消隐藏列,跳过周末列,vba,excel,Vba,Excel,概念简单,难以实施。一整天都在努力,但运气不好 我有一个日跟踪系统。随着每一个新的一天,我希望能够运行一个宏,隐藏前一天和取消隐藏当前一天。我一次有10天的时间显示(当天+9天前) 通过谷歌搜索,我找到了一些很好的代码,它们的功能和我描述的一样,只是它不会跳过一个列(如果我想在我的跟踪器中跳过周末,我就需要这样做) 谢谢你的帮助 sub whatever() dim i as long for i = 4 to 34 if columns(i).hidden = fa

概念简单,难以实施。一整天都在努力,但运气不好

我有一个日跟踪系统。随着每一个新的一天,我希望能够运行一个宏,隐藏前一天和取消隐藏当前一天。我一次有10天的时间显示(当天+9天前)

通过谷歌搜索,我找到了一些很好的代码,它们的功能和我描述的一样,只是它不会跳过一个列(如果我想在我的跟踪器中跳过周末,我就需要这样做)

谢谢你的帮助

sub whatever()
    dim i as long

    for i = 4 to 34

    if columns(i).hidden = false then
        bfirst = true
        columns(i).hidden = true
        columns(i + 10).hidden = false
    exit for
    end if
    next
end sub

如果您的数据有一行日期,您确实可以使用
工作日(单元格(r,c))
来确定是否是周末,然后使用
选择大小写来隐藏/取消隐藏列

当前值可通过
Date()
检索

然后,您可以在
子工作簿中设置为code\u Open()
此工作簿中设置为code
对象。因此,当文件打开时,它会运行代码,因此今天和前9天不会被隐藏

编辑:将这两个子项添加到“ThisWorkbook”对象中,根据您的工作表名称、行和列进行更改。如果您想要在前9个“工作日”,那么您必须更改案例或使用不同的方法来确定是否应该隐藏列。这就是我要去的地方。祝你好运

Sub Workbook_Open()
    ShowTodayPlusPrevious
End Sub

Private Sub ShowTodayPlusPrevious()
    ' Assuming Row 1 contains the dates, stating from column 2
    Const DateRow As Long = 1
    Const PrevDays As Long = 9
    Dim oWS As Worksheet, lCol As Long, lLastCol As Long, bHide As Boolean

    Set oWS = ThisWorkbook.Worksheets("Sheet1") ' Change this to the name of your sheet
    lLastCol = oWS.Cells.SpecialCells(xlLastCell).Column
    For lCol = 2 To lLastCol
        bHide = True
        Select Case Date - oWS.Cells(DateRow, lCol).Value
            Case 0 To PrevDays
                If Weekday(oWS.Cells(DateRow, lCol).Value) <> vbSaturday And _
                    Weekday(oWS.Cells(DateRow, lCol).Value) <> vbSunday Then
                    bHide = False
                End If
        End Select
        oWS.Columns(lCol).Hidden = bHide
    Next
    Set oWS = Nothing
End Sub
子工作簿\u Open()
今天的演出
端接头
今日私人子秀plusPrevious()
'假设第1行包含日期,从第2列开始
Const DateRow的长度=1
常数前几天的长度=9
将oWS标注为工作表,lCol标注为长,lLastCol标注为长,bHide标注为布尔值
设置oWS=ThisWorkbook.Worksheets(“Sheet1”)'将其更改为工作表的名称
lLastCol=oWS.Cells.SpecialCells(xlLastCell.Column)
对于lCol=2至lLastCol
bHide=True
选择案例日期-oWS.Cells(DateRow,lCol).Value
案例0至前几天
如果工作日(oWS.Cells(DateRow,lCol).Value)为星期六和星期六_
工作日(oWS.Cells(DateRow,lCol.Value)然后是星期天
bHide=False
如果结束
结束选择
oWS.Columns(lCol).Hidden=bHide
下一个
设置oWS=无
端接头

与其寻找一个能完全满足您需求(几乎不可能)的代码,不如自己尝试一下?在这段代码中,您拥有所需的基本功能:循环列、隐藏/取消隐藏列(以及知道列是否隐藏)。理解每一位的作用,改变态度(“无论什么”作为子的名称并不表示太多的兴趣),并记住这是一个程序员的网站;如果你不是程序员(也不想成为程序员),也许你应该雇佣一个程序员来为你写这篇文章。那么这篇文章的最终工作版本会是什么样子呢?我不擅长可视化VBA的概念,直到我看到它的结果。