【问题标题】:Some cells in formatted date column appearing in mm-dd-yyyy while rest are dd-mm-yyyy格式化日期列中的某些单元格出现在 mm-dd-yyyy 中,而其余单元格为 dd-mm-yyyy
【发布时间】:2020-09-28 09:55:29
【问题描述】:

我有一个文件,我需要检查当前周是否在每条记录的指定日期内。名为“有效日期”和“到期日期”的日期位于 E 和 F 列中。由于该文件是从某个数据库下载的,因此我对这些列进行了一定程度的清理。 (注意:“当前”周总是前一周)

这是我的代码:

Public Sub datechk()

Dim wb As Workbook
Dim ws As Worksheet
Dim i, cnt As Long
Dim temp As String
Dim current_Sun, current_Mon As Date
Set wb = ThisWorkbook
Set ws = wb.ActiveSheet

current_Mon = Date - Weekday(Date, vbMonday) + 1 - 7
current_Sun = Date - Weekday(Date, vbSunday) + 1

ws.Range("C1").CurrentRegion.Replace What:="null", Replacement:="", _
        SearchOrder:=xlByColumns, MatchCase:=False
cnt = Application.WorksheetFunction.CountA(ws.Range("C:C"))
'short date format
    For i = 2 To cnt
        temp = ws.Cells(i, "E").Value
        On Error Resume Next
        ws.Cells(i, "E").Value = Mid(temp, 1, InStr(temp, " ") - 1)
        temp = ws.Cells(i, "F").Value
        On Error Resume Next
        ws.Cells(i, "F").Value = Mid(temp, 1, InStr(temp, " ") - 1)
    Next
    On Error GoTo 0
    ws.Range("E:F").NumberFormat = "dd/mm/yyyy"
For i = 2 To cnt
        If current_Sun <= ws.Cells(i, "E").Value Or current_Mon >= ws.Cells(i, "F").Value Then
            ws.Cells(i, "G").Value = 0
        Else
            ws.Cells(i, "G").Value = 1
        End If
        If IsEmpty(ws.Cells(i, "F")) Or ws.Cells(i, "F").Value = 0 Or ws.Cells(i, "F").Value = "" Then
            ws.Cells(i, "G").Value = 1
        End If
    Next
End Sub

E 和 F 列包含生效日期和到期日期。 G 列是我检查我当前的一周是否在日期范围内的检查器。

现在这在我的笔记本电脑上运行良好。但是,当我的客户运行代码时,他遇到了错误。到期日期 (F) 列中的某些单元格以 (mm-dd-yyyy) 格式出现,因此无法检查。

例如: 到期日期是 01-10-2020,在我客户的输出文件中,它显示为 10-01-2020。

这种情况并非在每一行都发生,并且在生效日期 (E) 中也没有发生。我已经检查了我的客户拥有的输出文件,并且该特定单元格上的格式仍然是 dd-mm-yyyy。

是否有人碰巧知道为什么会发生这种情况以及如何解决?由于我自己运行代码时没有收到此错误,因此我也无法尝试修复它。

(这是我第一次发帖。如果需要更多信息,请告诉我)

TIA

【问题讨论】:

    标签: excel vba date


    【解决方案1】:

    您的客户端可能有不同的区域设置(查看 Windows/设置/时间和语言/区域)。如果您将区域格式设置为英语(英国),并且他/她使用英语(美国),那么您将在 Excel 中将 dd/mm 作为默认值(获取 Windows 设置),您的客户将获得 mm/dd .欢迎来到带有日期的精彩编程世界!

    解决此问题的一种方法可能是使用 Excel 中的 VALUE() 函数将日期的字符串表示形式转换为 Excel 日期变量。例如 =VALUE("12-Jun-20") 返回 43994(自 1900 年 1 月 1 日以来的天数)。如果您有 dd/mm 区域设置,=VALUE("12/06/2020") 将返回 43994。如果您的客户端有 mm/dd 设置,则 =VALUE("06/12/2020") 也将返回 43994 . 然后你就可以在你的代码中使用这个变量了。

    (另外,我更喜欢使用 Int(Now()) 来获取今天的日期,而不是 Date 语句,因为这也是一种可能导致混淆的数据类型)

    【讨论】:

      猜你喜欢
      • 2016-09-03
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      相关资源
      最近更新 更多