首页 > 解决方案 > 日期函数将 DD-MM-YYYY 更改为 MM-DD-YYYY 输出

问题描述

我正在为员工设置一个用户表单来填写数据。他们需要填写像 DD-MM-YYYY 这样的日期,输出也必须是 DD-MM-YYYY。但是,我使用的代码将输入 5-12-2019 (DD-MM-YYYY) 更改为输出 12-5-2019 (MM-DD-YYYY)。在用户表单中,当您将其转移到您的 Excel 工作表时,它会保持 (DD-MM-YYYY) 的预期。如果月份高于 13,则不会更改,因此输入 13-12-2019 (DD-MM-YYYY) 保持输出 13-12-2019 (DD-MM-YYYY)。代码怎么可能改变输出但不是每次都以相同的方式,我在代码中做错了吗?

Private Sub TextBox1_BeforeUpdate(ByVal cancel As MSForms.ReturnBoolean)
    If IsDate(Me.TextBox1.Text) Then
        Me.TextBox1.Text = Format(Me.TextBox1.Text, "DD-MM-YYYY")
    Else
        MsgBox "Vul een geldige datum in", vbRetryCancel + vbCritical
    End If

End Sub

Public Function IsTime(Expression As Variant) As Boolean
    If IsDate(Expression) Then
        IsTime = (Int(CSng(CDate(Expression))) = 0)
    End If
End Function

标签: excelvbavalidationdate

解决方案


  1. 将日期读取为字符串。例如5-12-2009
  2. 按 分割字符串-
  3. 第 0 个值是日,第 1 个是月,第 2 个是年。
  4. 从那里,您有一个功能齐全的日期,使用DateSerial().

Public Function StringToDate(myInput As String) As Date

    Dim day As Long
    Dim month As Long
    Dim year As Long
    Dim dateArray As Variant

    dateArray = Split(myInput, "-")
    day = dateArray(0)
    month = dateArray(1)
    year = dateArray(2)

    StringToDate = DateSerial(year, month, day)

End Function

Public Sub Main()

    Debug.Print month(StringToDate("05-10-2001"))
    Debug.Print StringToDate("05-10-2001")

End Sub

推荐阅读