vba:日期数组上的lbound错误

时间:2018-06-15 12:42:07

标签: vba excel-vba excel

我有一个" Datevarie"动态矩阵,包含许多日期。

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

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

我认为当我逐步调试数组时,数组中的数据输入正确。

如何解决而无需在工作表上报告数据并订购它们?我必须使用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
...

2 个答案:

答案 0 :(得分:2)

  

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

LBOUNDUBOUND函数返回数组的低层和高层边界,而不是数组中最低和最高的

默认情况下,VBA中的数组为base-0,因此初始化数组的LBound通常应为0。

如果你想获得最低或最高值,那么你需要实现自己的算法(例如,for / next循环),或者如果这是一维数组我们可能{{3其中包括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))

答案 1 :(得分:0)

数组从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 Sub