我希望在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"
答案 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"