在Access中移动logging集中的特定点

我有一个用Access VBA编写的函数。 这个function的目的是执行简单的线性插值。 它使用从inputlogging集中绘制的最近“MaturityDates”date的ZeroRates插值指定date的“ZeroRate”值。 function如下:

Function CurveInterpolateRecordset(rsCurve As Recordset, InterpDate As Date) as Double Dim Q As Long Dim x1 As Date, x2 As Date, y1 As Double, y2 As Double, x As Date CurveInterpolateRecordset = Rnd() If rsCurve.RecordCount <> 0 Then Q = 1 rsCurve.MoveFirst x1 = CDate(rsCurve.Fields("MaturityDate")) y1 = CDbl(rsCurve.Fields("ZeroRate")) If InterpDate = CDate(rsCurve.Fields("MaturityDate")) Then CurveInterpolateRecordset = CDbl(rsCurve.Fields("ZeroRate")): Exit Function rsCurve.MoveNext Do While (CDate(rsCurve.Fields("MaturityDate")) <= InterpDate) If rsCurve.EOF Then CurveInterpolateRecordset = CDbl(rsCurve.Fields("ZeroRate")): Exit Function If InterpDate = CDate(rsCurve.Fields("MaturityDate")) Then CurveInterpolateRecordset = CDbl(rsCurve.Fields("ZeroRate")): Exit Function If InterpDate > CDate(rsCurve.Fields("MaturityDate")) Then x1 = CDate(rsCurve.Fields("MaturityDate")) y1 = CDbl(rsCurve.Fields("ZeroRate")) End If rsCurve.MoveNext If rsCurve.EOF Then CurveInterpolateRecordset = y1: Exit Function Loop x2 = CDate(rsCurve.Fields("MaturityDate")) y2 = CDbl(rsCurve.Fields("ZeroRate")) CurveInterpolateRecordset = y1 + (y2 - y1) * CDate((InterpDate - x1) / (x2 - x1)) End If End Function 

现在,函数从rsCurve.MoveFirst定义的logging集的开始处开始,并从那里遍历logging集,直到logging集rsCurve.EOF结束。 它插值在这些值上。 但是,我不希望它始终从logging集的开始处开始。

相反,我希望它从logging集中的特定点开始。 我在名为“MarkAsOfDate”的logging集中有一列date。 而不是内插整个logging集,我希望它只能插入MarkAsofDate等于某个用户input的值。 所以对于2015年7月31日,我希望它使用MarkAsofDate列等于7/31/2015的行中的值进行插值。 我怎样才能改变rsCurve.MoveFirst来完成呢? 我尝试使用Do While命令,但没有成功。

尝试这样的事情:

 Set rsCurve = db.OpenRecordset("SELECT * FROM MyTable WHERE MyDate >= #" & txtUserInputDate.Value & "# ORDER BY MyDate ASC") 

你将不得不改变明显的信息,如表名,文本框名称和字段名称,但这是一般的想法。