首页 > 解决方案 > 使用 VBA 在 Excel 中基于当前年份的动态下拉列表

问题描述

是否可以根据当前年份创建动态下拉列表?例如,我想根据当前年份(2019)创建一个下拉列表;其中有 5 个选项:

然后,从 2020 年 1 月 1 日开始,下拉列表将自动更新为 2020、2021、2022、2023 和 2024。这可能与数据验证下拉列表中的某些表达式有关吗?

标签: excelvbavalidationdrop-down-menu

解决方案


VBA 中的“动态”验证可以通过每次在需要时重写验证来实现。在更糟糕的情况下,可能是每次打开工作表时,甚至可能是每次更改选择时,可能是通过事件。

excel 中的验证可以是列表,而在 VBA 中,此列表作为用逗号分隔的字符串传递。因此,字符串2019, 2020, 2021, 2022, 2023是预期列表的一个很好的例子。有不同的方法可以做到这一点,循环可能是“最奇特的”,但只要值只有 5,那么手动编写它们也可能是合适的。

TL DR - 在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

在此处输入图像描述


推荐阅读