输入UDF的日期

时间:2018-10-08 19:03:10

标签: excel vba excel-vba

所以我创建了一个UDF,它是一个索引匹配项。它运行完美,但是当我将变量之一更改为某个日期时,我遇到了问题。我根本无法输入“ oct-18”,oct-18或01-10-2018。我必须引用具有日期的单元格,我认为这是因为它链接到10月18日的日期代码43374。我想同时拥有两种选择:

1)我可以引用单元格的地方 2)在这里我可以简单地输入日期,例如oct-18

任何帮助或做什么指示都很好

下面是我写的UDF:

Function flatrate(Xa, Aa)
Application.Volatile
Dim lngRowMatch       As Long
Dim lngColMatch       As Long
Dim matrix            As Range

Set matrix = Sheets("flat rates").Range("flat_rates")
With matrix
  lngRowMatch = Application.WorksheetFunction.Match(Xa, .Columns(1), 0)
  lngColMatch = Application.WorksheetFunction.Match(Aa, .Rows(1), 0)
  flatrate = .Cells(lngRowMatch, lngColMatch)
End With
Exit Function
End Function

2 个答案:

答案 0 :(得分:1)

看起来像日期的字符串仍然不是真实的日期。尝试在函数中添加日期转换。

Function flatrate(Xa as variant, Aa as variant)

    Application.Volatile
    Dim lngRowMatch       As variant
    Dim lngColMatch       As variant

    if isdate(Xa) then _
        Xa = cdate(Xa)    '<~~ force date conversion here

    With workSheets("flat rates").Range("flat_rates")
      lngRowMatch = Application.Match(Xa, .Columns(1), 0)
      lngColMatch = Application.Match(Aa, .Rows(1), 0)
      if iserror(lngRowMatch) or iserror(lngColMatch) then
          flatrate = cverr(xlerrna)
      else
          flatrate = .Cells(lngRowMatch, lngColMatch)
      end if
    End With

End Function

答案 1 :(得分:0)

尝试引用.Cells(lngRowMatch, lngColMatch).value2来获取Excel不会自动转换的单元格的实际值。