Как открыть рабочий лист в СЕГОДНЯ () + 2? - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть несколько листов 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

Столбец даты не содержит даты выходных, поэтому кодирование работает только тогда, когда сегодня период с понедельника по пятницу. Если я открою лист в субботу, он откроется в верхней части листа, который может находиться в тысячах строк от сегодняшней даты, поскольку лист содержит исторические данные, датированные несколькими годами.

Как изменить кодировку так, чтобы, если сегодняшняя дата не указана в столбце B, она увеличивала сегодняшнюю дату на 2 и искала эквивалент VODAY () + 2 для VBA, чтобы открыть лист с датой понедельника, видимой, если сегодня суббота или дата вторника, если сегодня воскресенье?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Игнорирование! После дополнительных экспериментов, которые мне удалось решить, просто понадобилась еще 1 строка кода:

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
0 голосов
/ 17 ноября 2018

Не уверен, что это то, что вы ищете, но если это выходные, он увеличит дату на два; в противном случае он останется сегодняшней датой.

Заменить:

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

countif просто гарантирует, что значение ячейки действительно существует и не выдает ошибку, когда вы пытаетесь активировать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...