«Динамическая» проверка в VBA может быть достигнута путем переписывания проверки каждый раз, когда это необходимо. В худшем случае это может быть каждый раз, когда рабочий лист открывается, или даже каждый раз, когда выбор изменяется, возможно, с помощью событий.
Проверка в Excel может быть списком, а в VBA этот список передается какстрока, разделенная запятыми. Таким образом, строка 2019, 2020, 2021, 2022, 2023
является довольно хорошим примером ожидаемого списка. Есть разные способы сделать это, вероятно, цикл будет самым «причудливым», но поскольку значения только 5, то их запись вручную, вероятно, также подходит.
TLDR - запустите это в Workbook_Open()
событии:
Sub TestMe()
Dim validationString As String
validationString = Year(Now()) & ", " _
& Year(Now()) + 1 & ", " _
& Year(Now()) + 2 & ", " _
& Year(Now()) + 3 & ", " _
& Year(Now()) + 4
With Worksheets(1).Cells(1, "A").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, _
Formula1:=validationString
End With
End Sub