繁体   English   中英

基于当前年份的动态下拉列表 Excel 和 VBA

[英]Dynamic dropdown based on the current year in Excel with VBA

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

  • 2019
  • 2020
  • 2021
  • 2022
  • 2023

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

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

在此处输入图像描述

将这些公式放在两个单独的表格中,没有标题并从第 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())))

..您将获得从当前日期开始的动态引用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM