【问题标题】:Why is my array in VBA not populating all of the values?为什么我在 VBA 中的数组没有填充所有值?
【发布时间】:2019-10-24 22:19:21
【问题描述】:

这是我的第一篇文章。我已经使用 VBA 一个月了,我正在尝试使用基于用户定义范围的日期填充数组。例如,用户将输入:05/01/2001 - 05/21/2001。在那里,我试图用从开始到结束的所有日期填充一个数组,在这个例子中它将是 21 个日期。当我打印出数组时,我只得到奇数天,而不是偶数天。有人能帮忙吗?谢谢!

我使用 DateDiff() 函数来获取开始日期和结束日期之间的天数,以确定我必须包含在数组中的日期数。

temp_csv_file_count 是数组中的值的个数,input_start_date 和 input_end_date 是字符串,忽略状态,和别的东西有关。

temp_csv_file_count = DateDiff("d", input_start_date, input_end_date)
temp_csv_file_count = temp_csv_file_count + 1

Dim temp_date() As String
ReDim temp_date(0 To temp_csv_file_count) As String

Dim i As Integer

For i = 0 To temp_csv_file_count
        temp_date(i) = DateAdd("d", i, input_start_date)
        i = i + 1
Next i


msg = "File Count: " & temp_csv_file_count & ", State: " & temp_state
MsgBox msg

Dim array_contents As String
Dim j As Integer

For j = 0 To temp_csv_file_count
        array_contents = array_contents + temp_date(j) + vbNewLine
Next j

MsgBox "the values of my dynamic array are: " & vbNewLine & array_contents

实际: 2001 年 5 月 1 日, 2001 年 5 月 3 日, 2001 年 5 月 5 日, 2001 年 5 月 7 日, 2001 年 5 月 9 日, 2001 年 5 月 11 日, 2001 年 5 月 13 日, 2001 年 5 月 15 日, 2001 年 5 月 17 日, 2001 年 5 月 19 日, 2001 年 5 月 21 日

【问题讨论】:

  • 不要在循环内增加i。删除i = i + 1

标签: arrays excel vba datediff


【解决方案1】:
For i = 0 To temp_csv_file_count
    temp_date(i) = DateAdd("d", i, input_start_date)
    'i = i + 1 'THIS IS WHY
Next i

一个 for 循环将一次迭代 1 次,除非在 Step 中指定(您没有列出该步骤,所以它假定为 1),您告诉它在循环本身迭代之前添加 1(通过 @ 987654323@)。

For i = 0 To temp_csv_file_count Step 1 'added the step to ensure it is understood
    temp_date(i) = DateAdd("d", i, input_start_date)
Next i

【讨论】:

    【解决方案2】:

    For-each loop 每次将i 的值增加一(如果你不改变它)。没有理由使用i = i + 1

    更多详情:

    • 如果您想i 的值增加两倍,您可以使用Step 2

    示例:

    For i = 0 To temp_csv_file_count Step 2 temp_date(i) = DateAdd("d", i, input_start_date) Next i

    • 如果你想从底部到顶部开始循环 OR如果循环旨在删除

    示例:

    For i = temp_csv_file_count To 0 Step -1 temp_date(i) = DateAdd("d", i, input_start_date) Next i

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 2014-10-03
      • 2014-09-07
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 2011-08-18
      相关资源
      最近更新 更多