我有多个Excel工作表,其日期在B列中。我使用以下VBA代码块打开了工作表,其中今天的日期在屏幕上可见。
Private Sub Worksheet_Activate()
Dim d As Date, i As Long
d = Date
ActiveWindow.ScrollRow = 1
For i = 16 To Cells(Rows.Count, "B").End(xlUp).Row
If Cells(i, "B").Value = d Then
Cells(i, "B").Select
Exit Sub
End If
Next
End Sub
date列不包含周末的日期,因此仅当今天在星期一和星期五之间时,编码才起作用。如果我在星期六打开工作表,则该工作表将在工作表的顶部打开,这可能会与今天的日期相距数千行,因为工作表中包含可追溯到几年的历史数据。
我该如何修改编码,以便如果今天的日期不在B列中,那么它将今天的日期增加2,并搜索相当于TODAY()+ 2的VBA,这样它将打开工作表,如果星期一的日期可见今天是星期六,如果今天是星期天,则可以看到星期二的日期?
答案 0 :(得分:1)
不确定这是否是您要查找的内容,但是如果是周末,它将把日期增加两个;否则将保持今天的日期。
替换:
div
使用
d = Date
但是您可能还需要重新考虑遍历每个单元格以查找所需内容。如果数据集很大,则可能需要一段时间才能考虑将其替换为:
d=Evaluate("=IF(OR(WEEKDAY(TODAY())=7,WEEKDAY(TODAY())=1),TODAY()+2,TODAY())")
If Application.WorksheetFunction.CountIf(ActiveSheet.Range("B:B"), d) > 0 Then
ActiveSheet.Range("B:B").Find(d).Activate
End If
仅确保单元格值实际存在,并且在您尝试激活它时不会出错。
答案 1 :(得分:0)
无视!经过更多的实验,我设法解决了它,它只需要再增加一行代码即可:
Private Sub Worksheet_Activate()
Dim d As Date, i As Long
d = Date
ActiveWindow.ScrollRow = 1
For i = 16 To Cells(Rows.Count, "B").End(xlUp).Row
If Cells(i, "B").Value = d Then
Cells(i, "B").Select
Exit Sub
Else: d = Date + 2
End If
Next
End Sub