VBA如何基于当前日期减去2天隐藏多个工作表
我想隐藏比当前日期早2天的工作表。一张日期为9月30日的工作表(日期在单元格A1中)我需要在9月28日隐藏。到目前为止,我有下面的内容,但当我运行它时,它会隐藏我所有的工作表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
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
注释
此工作簿
对象中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。