我有一个小的用户界面,使用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
有没有办法确保将变量格式固定为英国版?
答案 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