任务表单的日期显示美国格式,除非日期不存在

时间:2018-02-26 14:31:39

标签: excel excel-vba vba

我有一个小的用户界面,使用Excel的表单功能,允许用户输入项目的开始和结束日期。

如果用户输入美国和英国格式的日期(例如2018年5月7日,5/7/2018),该变量将以美国格式出现(例如2018年7月5日,5/7 / 2018)。但是,如果两种格式都没有日期(例如2018年8月31日,2018/18/201),则该变量将以(正确的)英国格式返回。

表格中特定变量的当前代码如下:

Private Sub Calculate_Click()

    sDate = CDate(sDate.Text)
    eDate = CDate(eDate.Text)

    If sDate = vbNullString Then
        sDate = Now()
    End If

    If eDate = vbNullString Then
        eDate = Now() + 40
    End If

    If HoursPD = vbNullString Then
        HoursPD = 6
    ElseIf HoursPD > 7.5 Then
        HoursPD = 7.5
    End If

    Me.Hide

End Sub

有没有办法确保将变量格式固定为英国版?

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作,但您的用户应该知道以正确的(英国)格式输入日期:

    sDate = Format(CDate(sDate.Text), "dd/mm/yyyy")
    EDate = Format(CDate(EDate.Text), "dd/mm/yyyy")

答案 1 :(得分:1)

我会使用单独的程序来检查表格上的任何日期 如果输入无效日期,这也会将控件变为红色 将日期格式设置为dd-mmm-yyyy可以更容易地以错误的格式发现日期,因为月份是完整的(ish)。

Public Sub FormatDate(ctrl As Control)

    Dim dDate As Date
    Dim IsDate As Boolean

    On Error GoTo ERR_HANDLE

    If Replace(ctrl.Value, " ", "") <> "" Then
        On Error Resume Next
            dDate = CDate(ctrl.Value)
            IsDate = (Err.Number = 0)
            On Error GoTo 0
        On Error GoTo ERR_HANDLE

        If IsDate Then
            ctrl.Value = Format(ctrl.Value, "dd-mmm-yyyy")
            ctrl.BackColor = RGB(255, 255, 255)
        Else
            ctrl.BackColor = RGB(255, 0, 0)
        End If
    End If

EXIT_PROC:
        On Error GoTo 0
        Exit Sub

ERR_HANDLE:
        'Error Handling routines.
        'DisplayError Err.Number, Err.Description, "mdl_FormatDate.FormatDate()"
        Resume EXIT_PROC

End Sub  

然后在控件的AfterUpdate事件中调用它:

Private Sub txtDate_AfterUpdate()

    On Error GoTo ERR_HANDLE

    With Me
        FormatDate .txtDate
    End With

EXIT_PROC:
        On Error GoTo 0
        Exit Sub

ERR_HANDLE:
        'Error Handling routines.
        'DisplayError Err.Number, Err.Description, "Data_Entry_Form.txtDate_AfterUpdate()"
        Resume EXIT_PROC

End Sub