Excel VBA:隐藏/取消隐藏日常跟踪器中的列,跳过周末列

时间:2013-08-11 08:22:27

标签: vba excel-vba excel

简单的概念很难实现。一整天都没有运气。

我有一天=超日追踪器。每个新的一天,我都希望能够运行隐藏前一天的宏,并取消当前的一天。我有10天的时间显示(当天+ 9之前)。

通过谷歌搜索,我找到了一些好的代码,其功能正如我所描述的那样,除了它不会跳过一个列(如果我想在我的跟踪器中基本上跳过周末,我需要这样做。)< / p>

感谢您的帮助。

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

1 个答案:

答案 0 :(得分:0)

如果您的数据有一行日期,您确实可以使用Weekday(Cells(r,c))确定它是否为周末,然后使用Select Case来隐藏/取消隐藏列。

可以通过Date()检索当前的电流。

然后,您可以在Sub Workbook_Open()对象的ThisWorkbook中设置代码。因此,当文件打开时,它会运行代码,因此今天不会隐藏前9天。

编辑:将这2个子项添加到“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