验证文本框条目中的日期格式

时间:2019-04-26 06:22:49

标签: excel vba date format

我希望在excel vba中提供一个文本框来输入日期。允许的日期格式为d-m-yy或yyyy,dd-mm-yy或yyyy,d / m / yy或yyyy,dd / mm / yy或yyyy。但是输出格式应为dd-mm-yyyy。我只是不知道从哪里开始。我知道如何将数据写入所需的工作表以外的内容,但对此代码一无所知。请指南

If IsDate(Me.TextBox2.Value) = False Then. 
MsgBox "Enter a valid date format." & vbNewLine _  
& "Valid Date Formats are:" & vbNewLine & vbNewLine _  
& "D/M/YY" & vbNewLine _  
& "DD/MM/YYYY" & vbNewLine _ & "D-M-YY" & vbNewLine _  
& "DD-MM-YYYY", vbExclamation, "Date Format ERROR"  
TextBox2.Activate  
Exit Sub  
End If 
'This works perfect 
Worksheets("PURCHASE").Range("B" & newrow) = CDate(TextBox2.Text)
Worksheets("PURCHASE").Range("B" & newrow).NumberFormat = "dd-mm-yyyy"  

2 个答案:

答案 0 :(得分:0)

一种选择是,在用户向文本框中输入字符串之后,检查是否可以格式化日期。如果没有,则添加一个废话日期,并且可以将问题通知用户

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    Dim nwdate As String

    If Len(TextBox1.Value) < 6 Then GoTo falsedate
    nwdate = Format(TextBox1.Value, "dd-mm-yyyy")
    If nwdate = TextBox1.Value And Format(nwdate, "dd-mmmm-yyyy") = nwdate Then
        GoTo falsedate
    Else
        TextBox1.Value = nwdate
    End If
    Exit Sub
falsedate:
    MsgBox "Enter a valid date before proceeding", vbExclamation, "Error"
    TextBox1.Value = ""
End Sub

答案 1 :(得分:0)

有一个VBA Range.IsDate function,尝试将有效日期解析为true,将无效日期解析为false。

  

在Windows中,有效日期范围是公元100年1月1日至9999年12月31日。范围因操作系统而异。

这不能解释Excel 1900日期系统,但是可以解释Excel 1904日期系统。责怪Lotus 1-2-3造成不平等。

无论IsDate中使用哪种算法,我都可以说,与在源端和目标端上的各种系统区域设置上进行CDate转换相比,使用该算法取得的成功要小得多

最终,我发现SQL标准YYYYMMDD是一种有效的存储和传递方法以及原始长整数。后者只需要在Excel中设置单元格格式即可向真实的人表明该值是一个日期。

如果您的代码接受CDate或IsDate验证的字符串日期输入,那么您可能正在将字符串日期传输到单元格中。日期是数字,可能需要格式化以使人们将日期视为日期,而不是像43453这样的数字。

Worksheets("PURCHASE").Range("B" & newrow) = cdate(TextBox2.Text)
Worksheets("PURCHASE").Range("B" & newrow).numberformat = "dd/mm/yyyy"