【问题标题】:Add unique year from date to combobox将唯一年份从日期添加到组合框
【发布时间】:2013-12-18 08:04:25
【问题描述】:

我在一列中有一个日期列表。我想将这些日期的唯一年份添加到用户窗体上的组合框。

用户表单用于根据用户选择的月份和年份生成报告。我只想要有条目的年份。所以当它进入 2014 年时,当第一个条目进入 2014 年的电子表格时,报告生成器可以选择。

Dim c As Range, Coll As New Collection
On Error Resume Next
For Each c In Sheets("Permits & Access").Range(ActiveSheet.Range("L3"), Sheet.Range    ("L3").End(xlDown))
Coll.Add c.Value, c.Value
Next c
On Error GoTo 0
For Each Item In Coll
cboYear.AddItem Item
Next Item

这是我用来显示唯一日期的代码 sn-p。但我实际上只需要独特的岁月。我知道使用 Year() 方法来提取年份,只是没有任何运气来实现它。

【问题讨论】:

  • 也许你可以把Coll.Add c.Value, c.Value改成Coll.Add Format(c, "yyyy"), Format(c, "yyyy")?或者如果您愿意接受其他方法,我发布了一个答案。
  • 我只是在尝试使用字典的解决方案。只需重新调整它以使用我需要它查看的范围。在这样做的同时,我看到了您的第二条评论并迅速尝试了一下,但它没有返回任何内容。我想知道这是否是因为它将值作为字符串值而不是日期值读取?

标签: vba date excel combobox


【解决方案1】:

我是这样做的,但改用Dictionary

Option Explicit
Private Sub UserForm_Initialize()

Dim dict As Object, item As Variant
Dim cel, rng As Range

Set dict = CreateObject("scripting.dictionary")
Set rng = ThisWorkbook.Sheets("Sheet1").Range("A2:A12") 

'--> empty ComboBox1
Me.ComboBox1.Value = ""

'--> sort the range, sorting Collection or Dictionary is a bit complex
rng.Sort Key1:=rng.Cells(1), Order1:=xlAscending, Header:=xlNo, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal 

'--> Test for unique year, add to dictionary
For Each cel In rng
    If Not dict.exists(Format(cel, "yyyy")) Then
        dict.Add Format(cel, "yyyy"), Format(cel, "yyyy")
    End If
Next

'--> Populate ComboBox1 with the unique year
For Each item In dict.items
    Me.ComboBox1.AddItem item
Next

Set dict = Nothing
Set rng = Nothing

End Sub

希望对你有所帮助。

【讨论】:

  • 其实我注意到了一个小故障。在电子表格中,并非所有条目都有日期。因此,日期列中存在空白。当表单运行时,它会将日期按时间顺序移动,如果日期之间存在间隔,则会将日期向上移动以填补这些间隔。
  • 哦,是的,它不会与您的其余数据对齐。我建议在临时位置复制带有日期数据的列,然后在那里进行排序。或者您可以包含整个数据范围,然后排序,然后调整为 rng 以仅迭代日期列。
  • 不是必须复制单元格的最漂亮的代码,但它可以工作,这是主要的事情。谢谢。
猜你喜欢
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 2017-09-03
  • 1970-01-01
相关资源
最近更新 更多