代码之家  ›  专栏  ›  技术社区  ›  Clauric

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

  •  0
  • Clauric  · 技术社区  · 6 年前

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

    如果用户输入的日期同时采用美国和英国格式(如2018年5月7日、2018年5月7日),变量将采用美国格式(如2018年7月5日、2018年5月7日)。但是,如果两种格式的日期都不可用(例如2018年8月31日、2018年8月31日),则变量将以(正确的)英国格式返回。

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

    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 回复  |  直到 6 年前
        1
  •  1
  •   Darren Bartrup-Cook Michał Turczyn    6 年前

    我会用一个单独的程序来检查表格上的任何日期。
    如果输入了无效的日期,也会将控件涂成红色。
    将日期格式化为 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
    
        2
  •  1
  •   Xabier    6 年前

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

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