Динамический выпадающий список на основе текущего года в Excel с VBA - PullRequest
1 голос
/ 04 ноября 2019

Можно ли создать динамический выпадающий список на основе текущего года? Например, я хочу создать выпадающий список на основе текущего года (2019);которые имеют 5 вариантов:

  • 2019
  • 2020
  • 2021
  • 2022
  • 2023

Затем, начиная с 01.01.2020, раскрывающийся список будет автоматически обновляться до 2020, 2021, 2022, 2023 и 2024. Возможно ли это сделать с каким-либо выражением в раскрывающемся списке проверки данных?

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

«Динамическая» проверка в 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

enter image description here

0 голосов
/ 04 ноября 2019

Поместите эти формулы в две отдельные таблицы без заголовков и начинайте с строки 1

Год:

=YEAR(TODAY())+ROW()-1

Столбец месяца 1:

=SWITCH([@Column2],1,"Jan",2,"Feb",3,"Mar",4,"Apr",5,"May",6,"Jun",7,"Jul",8,"Aug",9,"Sep",10,"Oct",11,"Nov",12,"Dec")

и столбец 2:

=MONTH(DATE(YEAR(TODAY()),MONTH(TODAY())+ROW()-1,DAY(TODAY())))

.. и вы получите динамические ссылки, которые начинаются с текущей даты

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