我的函数总是错误地将日期读错1年

时间:2019-01-22 19:33:57

标签: excel vba

我将日期存储在字符串中,有时以“ Nov-2018”的形式存储,有时以“ 11/1/2018”的形式存储。我想将它们普遍更改为“ Nov 2018”。只是月份和日期。

我编写了以下函数。

Function FnDateExtract(fnFile, fnTab, fnRow, fnColumn)
    Dim RawExtract As String
    With Workbooks(fnFile).Worksheets(fnTab)
        RawExtract = .Cells(fnRow, fnColumn).Text
        FnDateExtract = Format(RawExtract, "mmm yyyy")
    End With
End Function

我一直遇到这个问题,该函数将读取字符串'11 / 1/2018'和'Nov-2018'并返回结果'Nov 2019'。我不知道为什么会在2019年发布(但问题只从2019年1月1日开始出现。真奇怪。)

问题: 作为一种临时解决方案,是否可以将年份减去1?类似于FnDateExtract = Format(RawExtract,“ mmm yyyy-1 ”)?

如果您可以帮助我解决为什么函数总是在1年内误读字符串的问题,那也将大有帮助。谢谢!

修改 下面的RonRosenfeld建议该函数仅提取当前年份。我做了一些测试,看来它也将2017年提取为2019年。不知道为什么。仍在寻找解决方案。

1 个答案:

答案 0 :(得分:0)

结合使用IsDate检查和CDate转换来获得代表日期的正确字符串。

Option Explicit

Function FnDateExtract(fnFile As String, fnTab As String, fnRow As Long, fnColumn As Variant)
    With Workbooks(fnFile).Worksheets(fnTab)
        If IsDate(.Cells(fnRow, fnColumn).Text) Then
            FnDateExtract = Format(CDate(.Cells(fnRow, fnColumn).Text), "mmm yyyy")
        End If
    End With
End Function