【问题标题】:How to pass date values in an array to a collection?如何将数组中的日期值传递给集合?
【发布时间】:2019-10-22 12:43:18
【问题描述】:

我有一个数组形式:

["1/1/2019", "1/2/2019", "1/2/2019"]

我遍历数组中的每个元素并将结果添加到集合中,目的是在打印之前删除重复项。

VBA 仅将第一个元素添加到我的集合中。

例如我目前的输出是:

"1/1/2019"

代替:

"1/1/2019","1/2/2019"

这是我的相关代码:

Dim a_date() As Variant
Dim date_duplicates_removed As New Collection

Dim j As Long
j = 0
ReDim a_date(Range(date_range).Cells.Count)
For Each r In ThisWorkbook.Worksheets("Name").Range(date_range)
    a_date(j) = r.Value
    j = j + 1
Next r
On Error Resume Next
For x = 0 To UBound(a_date)
    date_duplicates_removed.Add a_date(x), CStr(a_date(x))
    MsgBox (date_duplicates_removed(x))
Next x

其中 date 是包含重复项的日期范围。

这很奇怪,因为:

  • 我检查了 UBound(date),结果是 12
  • 我访问了 MsgBox date_duplicates_removed(3) 并获得了一个值。
  • x 确实会增加到正确的结果。

我无法让 MsgBox 打印所有唯一日期,只有第一个日期。

【问题讨论】:

  • 你能做到Dim date() as Variant吗?据我所知,Date() 是 VBA 中的保留字...另外,您是否缺少一些代码,您在哪里输入数组?
  • 对不起,我更改了我的实际变量名称以简化代码。我实际上并没有使用“日期”。我还更新了我的问题以包含我输入数组的代码。

标签: excel vba


【解决方案1】:

我认为这是您使用数组的方式,和/或Date()

Sub t()
Dim myDates() As Variant
Dim date_duplicates_removed As New Collection
myDates = Array("1/1/2019", "1/2/2019", "1/2/2019")
Dim x As Long

On Error Resume Next
For x = 0 To UBound(myDates)
    date_duplicates_removed.Add myDates(x), CStr(myDates(x))
Next x
End Sub

为我正确返回:

【讨论】:

  • 我认为这是 VBA 的一些奇怪故障。如果我做 date_duplicates_removed.count 我得到 4 所以它必须对所有条目进行重复数据删除。谢谢,
猜你喜欢
  • 1970-01-01
  • 2015-03-10
  • 2018-09-06
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多