首页 > 解决方案 > vba:日期数组上的 lbound 错误

问题描述

我有一个包含许多日期的“Datevarie”动态矩阵。

在例程中的某个时刻,我必须从 DateVarie 中提取最低值。

问题是当我使用 Lbound 函数时,我总是返回值 1 而不是日期(例如“01/01/2018”)。

我认为数组中的数据输入正确,因为我一步步调试了几次。

如何在无需在工作表上报告数据并订购它们的情况下解决问题?我必须使用 FOR ... NEXT 吗?日期可以是 2-3,也可以是几十个

Type interventi
...
data as date
...

public Intervento as interventi
public rs1 as adodb.recordset    
    ...
Sub TheSubWithProblem(...)
...
dim Datevarie() as date
..
redim preserve etc..
DateVarie(k)=format(RS1!DataI,"dd/mm/yyyy") '<<<< correct
...

Intervento.data=lbound(datevarie)  '<<<< always return 1
...

标签: vbaexcel

解决方案


问题是当我使用 Lbound 函数时,我总是返回值 1 而不是日期(例如“01/01/2018”)。

LBOUNDUBOUND函数返回数组的下限和上限而不是数组中的最小值和最大值

VBA 中的数组默认以 0 为底,因此初始化的数组通常应LBound为 0。

如果您想获得最低或最高值,那么您需要实现自己的算法来做到这一点(例如,for/next 循环),或者如果这是一个单维数组,我们可以潜在地使用ArrayList一个对象有(除其他外)一种Sort方法:

Set d = CreateObject("System.Collections.ArrayList")
Dim dateVarie As Variant
Dim i As Long, m As Long, day As Long

For i = 1 To 100
    m = Application.WorksheetFunction.RandBetween(1, 12)
    day = Application.WorksheetFunction.RandBetween(1, 30)
    d.Add (DateValue(DateSerial(2018, m, day)))
Next

'Preserve your un-sorted array, if needed:
ReDim dateVarie(d.Count - 1)
dateVarie = d.ToArray()

Msgbox "The first value is: " & dateVarie(0)

d.Sort  ' Sorts the arraylist:

MsgBox "The lowest value is: " & (d(0))

推荐阅读