我将日期存储在字符串中,有时以“ 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年。不知道为什么。仍在寻找解决方案。
答案 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