DateValue 将一些日期保留为字符串

DateValue is leaving some dates as strings

使用 Office 365 - 但一些用户通过旧版本访问文件。标准和系统日期格式为 DD/MM/YYYY。原始数据也格式化为这样。

我有一系列显示为日期的单元格,但有些单元格的格式为文本。 数据来自系统提取,所以我无法帮助它原来的格式。

我使用此数据使用 VBA 创建自动报告,但出于某种原因,DATEVALUE 似乎将一些日期保留为字符串。

我已经尝试用几种不同的方式对其进行编码,但无法让它的这一小块工作,而且我一直让单元格仍然是文本。

如果我在 sheet 中手动应用公式,它会起作用。我已经通过应用中断进行了检查,那行代码是 运行(即应该满足 IF 语句标准)。

由于代码将数据从一个 sheet 移动到另一个,我知道所有变量都是正确的,除此之外其他一切都完美无缺。

有关详细信息,请参阅下文:

代码:

        If Replace(Field32, "/", "") <> Field32 Then
            Field32 = DateValue(Field32)
        End If

        If Replace(Field34, "/", "") <> Field34 Then
            Field34 = DateValue(Field34)
        End If 

我试过 CDate。我还尝试首先使用 Format(Field32, "dd/mm/yyyy") 格式化字段,我尝试了几种不同的方法来检查字段是否已经是日期。我尝试将所有内容转换为文本,然后将 DATEVALUE 应用于每一行,但没有用,只是获取了所有文本。我也尝试过将 DATEVALUE 应用于每一行,但似乎 DATEVALUE 根本不起作用,因为它没有 return 已经有日期的错误。我做错了什么?

代码执行后的数据:

如您所见,存储为文本的日期仍存储为文本,因此其他一些计算字段不起作用

将字段格式化为数字,以便清楚地看到哪些现在是日期:

例如:

    Dim c As Range, arr
    
    For Each c In Range("B25:B33").Cells
        'if formatted as text and content looks like a date
        If c.NumberFormat = "@" And c.Text Like "##/##/####" Then
            arr = Split(c.Text, "/")
            c.NumberFormat = "dd/mm/yyyy"   'set format *before* value
            c.Value = DateSerial(arr(2), arr(1), arr(0))
        End If
    Next c