在带有VBA的Excel中基于当年的动态下拉列表

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

  • 2019
  • 2020
  • 2021
  • 2022
  • 2023

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

dong2apple 回答:在带有VBA的Excel中基于当年的动态下拉列表

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

enter image description here

,

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

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

本文链接:https://www.f2er.com/3164941.html

大家都在问