-2

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

我有一个 day=over-day 跟踪器。在每一天,我都希望能够运行一个隐藏前一天并取消隐藏当天的宏。我一次显示 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
4

1 回答 1

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
于 2013-08-12T03:58:22.557 回答