【问题标题】:My function always reads date wrong by exactly 1 year我的函数总是将日期错误地读取 1 年
【发布时间】:2019-01-22 19:33:56
【问题描述】:

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

我写了以下函数。

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”并返回结果“2019 年 11 月”。我不知道为什么是 2019 年(但问题从 2019 年 1 月 1 日起才出现。真奇怪。)

问题: 作为临时解决方案,有没有办法将年份返回负1?类似于 FnDateExtract = Format(RawExtract, "mmm yyyy - 1")?

如果你能帮我解决为什么函数总是误读字符串正好 1 年的问题,那也会有很大帮助。谢谢!

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

【问题讨论】:

  • 日期、实际日期或看起来像日期的文本吗?
  • 您确定您指向的是正确的工作表和工作簿吗?
  • 我无法复制您的问题。尽管日期的格式,它仍然适用于我。正如@ScottCraner 所说,您确定要指向预期的工作表和工作簿吗?
  • 我们无能为力。如上所述,我们无法复制该问题。
  • 问题是你试图Format一个字符串。您可能总是会在输出中获得当前年份。尝试更改为:Dim RawExtract As Date

标签: excel vba


【解决方案1】:

结合使用 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

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 2015-03-10
    • 2012-01-27
    • 1970-01-01
    • 2021-11-20
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多