我希望在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"
有一个VBA Range.IsDate function尝试将有效日期解析为true,将无效日期解析为false。
在Windows中,有效日期的范围是公元100年1月1日至9999年12月31日A.D。;范围因操作系统而异。
这并不能解释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"
在用户在文本框中输入字符串之后,选项是检查是否可以格式化日期。如果没有,则添加无意义日期,并且可以向用户通知该问题
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