我对VBA很新,并且正在开发一个自定义函数(将来会用于更复杂的目的 - 这就是我想使用VBA而不是标准公式来实现这一目的的原因)从单元格中获取日期并在列中指定其位置(ia行号)(例如,列A)。
我通过以下程序解决了这个简单的任务:
Function TempRowNumber(OrgDate)
TempRowNumber = WorksheetFunction.Match(OrgDate, Range("A:A"), 0)
End Function
当然,它运作良好。但问题是,输入功能的日期可能不包括在范围内。在这种情况下,该函数应在该日期之前搜索最新输入的日期。在此范围内,日期始终按时间顺序排序,我计划构建错误检查公式(作为条件)和适当的循环。
问题是,如果我写这样的公式:
=ISERROR(MATCH(C23;A:A;0))
一切都很好(如果在A列中找到来自单元格C23的日期,则公式返回TRUE,如果未找到日期,则公式返回FALSE)。但是如果尝试将这个公式重写为VBA程序,i.a。:
Function FindDate(OrgDate)
FindDate = IsError(WorksheetFunction.Match(OrgDate, Range("A:A"), 0))
End Function
如果找不到日期,自定义函数会返回#VALUE!
错误(如果没有,则返回FALSE)。
下面我附上我所描述内容的快照。
你知道我该怎么办?提前谢谢。
答案 0 :(得分:2)
我不知道背后的原因,但这有效:
Function FindDate(Orgdate)
FindDate = IsError(Application.Match(Orgdate, Range("A:A"), 0))
End Function
逻辑上它应该与WorksheetFunction.Match
的工作方式相同,并且可以IsError
以相同的方式进行评估,但我已经尝试过,而且我得到的结果与您的结果相同。