【问题标题】:convert date in excel from dd-mm-yyyy to dd/mm/yyyy format and to check whether a date is valid or not将excel中的日期从dd-mm-yyyy转换为dd/mm/yyyy格式并检查日期是否有效
【发布时间】:2012-08-09 10:12:53
【问题描述】:

我很难将日期从 dd-mm-yyyy 格式转换为 dd/mm/yyyy 格式。

例如, 当我在 excel 中输入日期为 25/02/2012 (dd/mm/yyyy) 时,输入日期后如果进入下一行,它会将日期转换为 25-02-2012 (dd-mm-yyyy) 格式.

我想要做的是,当我在 excel 中以 (dd/mm/yyyy) 格式输入日期时,它应该保持原样并且不应该将其更改回 (dd-mm-yyyy) 格式当我转到下一个单元格。

当我输入我的日期作为当前系统日期时,我的代码给我一个错误,我无法验证日期,即输入的日期是否有效

    Sub valid_date()
    ' ---------------------------------------------------------------------
    ' Final Code - Trial
    ' ---------------------------------------------------------------------

    Dim d1 As Variant
    Dim IssueDate As Variant
    Dim str As Variant

        d1 = Worksheets("Sheet1").Cells(6, 1).value

            MsgBox " The Issue Date format is " & d1

        sysdate = Date

        MsgBox "System Date is " & sysdate


                If IsDateValid(d1) Then ' if date is in dd/mm/yyyy format then print this
            If (d1 > sysdate) Then
                MsgBox "Invalid date"
            End If
        End If
     End Sub

    Function IsDateValid(pdate) As Boolean

        IsDateValid = False

        Set RegExp = CreateObject("VBScript.RegExp")

        '   it only matches whether date is in dd/mm/yyyy format or not
        '
        '   [1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1]   ---> it allows the DATE  from 01 to 31
        '   [1-9]|0[1-9]|1[0-2]                 ---> it allows the MONTH from 01 to 12
        '   1[9][0-9][0-9]|2[0][0-9][0-9]       ---> it allows the YEAR  from 1900 to 2099
        '
        '   below is the regular expression for checking the date in dd/mm/yyyy format

        RegExp.Pattern = "^([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])[/]([1-9]|0[1-9]|1[0-2])[/](1[9][0-9][0-9]|2[0][0-9][0-9])$"

        ' check whether the date is in dd/mm/yyyy format or not....
        tempdate = RegExp.Test(pdate)

             If tempdate Then    ' if tempdate is in dd/mm/yyyy format than proceed further
                'If isdate(tempdate) Then  ' if date is a valid date then proceed further
                 If isdate(pdate) Then
                    IsDateValid = True
                Else
                    IsDateValid = False
                End If
            Else
                IsDateValid = False
            End If               
    End Function

我正在使用上述代码,通过正则表达式来检查日期是否为 dd/mm/yyyy 格式

但我面临的问题是,每当我以 dd/mm/yyyy 格式输入日期时,它将 excel 中的日期作为 dd-mm-yyyy 格式。

我已经稍微更新了我的代码, 当我输入我的日期作为当前系统日期时,我还需要更多帮助,这给了我错误

例如, 当我输入我的日期为 09/09/2012(假设这是您当前的系统日期)并且当我使用 IsDate 方法检查此日期时,它给了我一个错误

我再次编辑了我的代码,

谁能帮我解决这个问题

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    您不需要 VBA/RegEx。选择您输入日期的单元格/列并创建自定义数字格式:dd/mm/yyyy。现在无论您如何输入有效日期(05-05-2000、3-1-2010、14/6-1990 等),其格式都应为dd/mm/yyyy

    而且,正如 Olle 指出的那样,如果您要在 VBA 中操作日期,您应该使用 Date 对象而不是 Variant。这样您就可以使用 serial number 而不是具有潜在格式问题的字符串。

    【讨论】:

      【解决方案2】:

      首先,我建议您检查计算机上日期的区域设置。如果您将其设置为使用“dd/mm/yyyy”格式,Excel 也将使用它,并有望消除对任何 RegEx VBA 代码的需求。

      其次,如果您确实需要使用 VBA 重新格式化日期,我强烈建议您使用 Date 数据类型而不是 Variants。我还建议您在代码顶部使用 Option Explicit 并显式声明任何变量,以最大程度地减少拼写错误并生成更高质量的代码。

      第三,我又查看了你的代码,似乎它永远不会工作:

      1。因为它从未被声明过,所以tempdateVariant
      2。根据RegExp.Test(pdate) 的结果,您将tempdate 分配为boolean
      3。因此,当您检查IsDate(tempdate) 时,它始终是false,因为boolean 永远不可能是Date

      同样,如果您使用 Date 数据类型,您可以跳过 RegEx... :)

      【讨论】:

      • 我已经稍微更新了我的代码,而不是使用 tempdate 我现在在 中使用 pdate IsDate 方法为 IsDate(pdate),现在正确吗?
      • 是的,应该这样做。不过,我仍然推荐Option ExplicitDate。 ;)
      【解决方案3】:

      我使用 Adob​​e 在线 PDF 转 Excel,日期正确显示为 MM/DD/YYYY,但在提取月份 (=Month()) 时,它返回 DD 部分。它被解释为 DD/MM/YYYY。我将文件保存为 .csv 关闭并重新启动 excel 并打开 .csv 文件,日期正确 MM/DD/YYYY。

      【讨论】:

        猜你喜欢
        • 2022-11-17
        • 2016-11-06
        • 1970-01-01
        • 2017-06-24
        • 2016-01-02
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多