如何在Excel VBA函数中将date作为parameter passing

我试图做一个函数,将单元格中的date作为参数,然后使用该date来查找值。 要传递的date将在variablesEffDate中。 然后函数应该进入工作表RateChgs,检查EffDate的NewPymtEffDateRange,find它后,转到EscrowPymtAmtRange(一列宽),并返回同一行的值。

我只是通过键入GetEscrowPymt(8/1/2000)(或其他date)来得到在即时窗口中testing它的点。 从位置variables的值,我可以告诉该函数即使它在那里找不到date。 这是如何通过date的问题?

Function GetEscrowPymt(EffDate As Date) Dim PymtEffDateRange As Range Dim EscrowPymtAmtRange As Range Dim Position As Integer Set PymtEffDateRange = Worksheets("RateChgs").Range("NewPymtEffDate") Set EscrowPymtAmtRange = Worksheets("RateChgs").Range("EscrowPymt") Position = Application.WorksheetFunction.Match(EffDate, PymtEffDateRange, 1) MsgBox (Position) End Function 

Match函数中的最后一个参数允许返回一个近似匹配。 如果您需要完全匹配,那么您应该使用最后一个参数0来要求完全匹配。 否则,使用参数1-1将返回近似匹配,并假定数据按升序sorting。

 Position = Application.WorksheetFunction.Match(EffDate, PymtEffDateRange, 0) 

如果在查找数组中找不到effDate值,那么Match函数将会出错,所以您可能需要error handling逻辑来说明这种可能性。 我可能会使用可以接受错误types的Application.Match函数,其中Worksheet类中的Match函数只接受长/整数值,如果找不到该值,将会引发错误:

 Dim Position as Variant Position = Application.Match(EffDate, PymtEffDateRange, 0) If IsError(Position) Then MsgBox EffDate & " not found!", vbInformation Exit Function ' -- OR -- ' assign some other return value for the function, etc. End If 

有些函数在处理date值时也有困难,所以让我知道如果这不能解决问题。

VBA在各种系统环境下也不能很好地运行,如果你预计“2000年8月1日”以外的其他东西是2000年8月1日以后,你可能会遇到更多的问题,因为VBA会用美国的date格式来解释,而不是系统区域(例如,在2000年1月8日的英国)。 在这种情况下,最好将date作为文本,并根据文本而不是date进行匹配。