VBA如何基于当前日期减去2天隐藏多个工作表

VBA如何基于当前日期减去2天隐藏多个工作表,vba,Vba,我想隐藏比当前日期早2天的工作表。一张日期为9月30日的工作表(日期在单元格A1中)我需要在9月28日隐藏。到目前为止,我有下面的内容,但当我运行它时,它会隐藏我所有的工作表 Private Sub Worksheet_Change() Application.ScreenUpdating = False Dim myDate As Date myDate = Range("A1").Value Dim curr_date

我想隐藏比当前日期早2天的工作表。一张日期为9月30日的工作表(日期在单元格A1中)我需要在9月28日隐藏。到目前为止,我有下面的内容,但当我运行它时,它会隐藏我所有的工作表

Private Sub Worksheet_Change()
    
    Application.ScreenUpdating = False
    
    Dim myDate As Date
    myDate = Range("A1").Value
    Dim curr_date As Date
    curr_date = Date

    If curr_date >= CDate((myDate) + 2) Then
    
        ActiveWorkbook.Sheets(2).Visible = xlSheetHidden
        ActiveWorkbook.Sheets(3).Visible = xlSheetHidden
        ActiveWorkbook.Sheets(4).Visible = xlSheetHidden
        ActiveWorkbook.Sheets(5).Visible = xlSheetHidden
        ActiveWorkbook.Sheets(6).Visible = xlSheetHidden

    Else
    
        ActiveWorkbook.Sheets(2).Visible = xlSheetVisible
        ActiveWorkbook.Sheets(3).Visible = xlSheetVisible
        ActiveWorkbook.Sheets(4).Visible = xlSheetVisible
        ActiveWorkbook.Sheets(5).Visible = xlSheetVisible
        ActiveWorkbook.Sheets(6).Visible = xlSheetVisible
        
    End If
    
End Sub
试试这个

Private Sub Workbook_Open()
    Dim dateRng As Range, sht As Integer
    
    For sht = 2 To 6
        
        Set dateRng = Worksheets(sht).Range("A1")
        
        If VBA.IsDate(dateRng) Then

            If DateDiff("d", Now, CDate(dateRng)) >= -2 Then
                ActiveWorkbook.Sheets(sht).Visible = xlSheetHidden
            Else
                ActiveWorkbook.Sheets(sht).Visible = xlSheetVisible
            End If
    
        End If
        
    Next sht
End Sub
注释

  • 确保将代码放置在
    此工作簿
    对象中
  • 代码在第2页到第6页之间循环。如果您的工作表数量可变,则可以将
    6
    替换为
    Worksheets.Count()

  • 什么时候应该隐藏床单?当工作簿打开时(即检查今天的日期并隐藏相应的工作表),或者当用户在
    A1
    中更新日期时?是的,我希望每次打开工作簿时都运行宏,A1中的日期将保持不变,只是为了清楚起见,如果今天的日期不在接下来的2天内,则应隐藏所有工作表,否则,请出示床单。是否正确?如果每个工作表A1中的日期不在接下来的2天内,请隐藏该工作表。所以星期三的工作表将在星期一隐藏,星期四的工作表将在星期二隐藏等等。非常感谢,我将>=-2修改为Hi,在A1中,我已将时间设置为上午10点,以尝试将工作表隐藏在所需日期的上午10点。然而,它仍然只是看到了日期。我还尝试将日期偏移量变量更改为2.583天,但这不起作用。非常感谢您的帮助。您可以尝试使用小时偏移量
    DateDiff(“h”,现在是CDate(dateRng))
    >=58,其中58表示2天10小时。它似乎只在小时数是24的因数时才起作用,因此在您给我的示例中,它的工作方式与2天相同,并且忽略了额外的小时数。例如:
    DateDiff(“h”,现在,CDate(“27/09/2020 10:00:00”)
    返回47。