为什么我在VBA中的数组未填充所有值?

时间:2019-06-10 13:46:33

标签: arrays excel vba datediff

这是我的第一篇文章。我已经使用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日

2 个答案:

答案 0 :(得分: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(通过Next i)。

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

答案 1 :(得分:0)

For-each loop每次通过其自身将i的值增加一个(如果不更改的话)。没有理由使用i = i + 1

有关更多详细信息:

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

示例:

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

  • 如果您要从下至上开始循环 如果循环旨在删除

示例:

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