gpt4 book ai didi

vba - 如何在 Excel VBA 函数中将日期作为参数传递

转载 作者:行者123 更新时间:2023-12-02 18:17:41 26 4
gpt4 key购买 nike

我正在尝试创建一个函数,它将单元格中的日期作为参数,然后使用该日期来查找值。要传递的日期将位于变量 EffDate 中。然后该函数应转到工作表 RateChgs,检查 NewPymtEffDateRange 中的 EffDate,找到它后,转到 EscrowPymtAmtRange(一列宽)并返回同一行上的值。

我只是通过输入 GetEscrowPymt(8/1/2000)(或其他日期)在立即窗口中测试它。从 Position 变量的值来看,我可以看出该函数没有找到日期,即使它在那里。这是我传递日期的方式有问题吗?

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 将返回近似匹配,并假设数据按升序排序。

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

如果在查找数组中未找到 effDate 值,Match 函数将出错,因此您可能需要错误处理逻辑来解决这种可能性。我可能会使用可以接受错误类型的 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

某些函数也难以处理日期值,因此如果这不能解决问题,请告诉我。

VBA 也不能很好地适应各种系统区域设置,如果您期望“8/1/2000”不是 2000 年 8 月 1 日,您可能会遇到更多问题,因为 VBA 会按美国解释该日期日期格式,而不是系统区域设置(例如,在英国,该日期为 2000 年 1 月 8 日)。在这种情况下,最好将日期视为文本并根据文本而不是日期进行匹配。

关于vba - 如何在 Excel VBA 函数中将日期作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29933593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com