我有一个包含许多日期的"Datevarie“动态矩阵。
在例程中的某个时刻,我必须从DateVarie中提取最低值。
问题是,当我使用Lbound函数时,我总是返回值1而不是日期(例如"01/01/2018")。
我认为数组中的数据输入是正确的,因为我一步一步地调试了几次。
我如何才能解决问题而不必在工作表上报告数据并对它们进行排序?我是不是一定要用来...下一步?日期可以是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
...发布于 2018-06-15 20:54:55
问题是,当我使用Lbound函数时,我总是返回值1而不是日期(例如"01/01/2018")。
LBOUND和UBOUND函数返回数组的上下限,而不是数组中的最低和最高值。
默认情况下,VBA中的数组是基数0,因此初始化后的数组的LBound通常应为0。
如果你想得到最低或最高的值,那么你需要实现你自己的算法(例如,for/next循环),或者如果这是一个一维数组,我们可以潜在地make use of an ArrayList object,它有(在其他东西中)一个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))发布于 2018-06-15 20:50:51
数组从0开始。这就是为什么下面返回0的原因:
Sub TestMe()
Dim datevarie(2) As Date
Debug.Print LBound(datevarie)
End Sub无论是否将值放入数组中,这都无关紧要。如果您希望数组从1开始,请在VBA中编写Option Base 1,并确保没有人看到代码,因为您可能会遇到同事/同事的问题:
Option Explicit
Option Base 1
Sub TestMe()
Dim datevarie(2) As Date
Debug.Print LBound(datevarie)
End Subhttps://stackoverflow.com/questions/50875869
复制相似问题