文本框日期格式excel vba
我有一个代码,允许我在textbox1中手动输入日期,然后在useform的日历中选择该日期。第二个文本框允许我添加或减去日期。代码工作得很好 用户表单代码-文本框日期格式excel vba,vba,excel,Vba,Excel,我有一个代码,允许我在textbox1中手动输入日期,然后在useform的日历中选择该日期。第二个文本框允许我添加或减去日期。代码工作得很好 用户表单代码- Option Explicit Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If IsDate(Me.TextBox1.Value) Then Me.Calendar1.Value = Me.TextBox1.Value End Sub
Option Explicit
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsDate(Me.TextBox1.Value) Then Me.Calendar1.Value = Me.TextBox1.Value
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim dt As Date
With Me
If IsDate(.TextBox1.Value) Then
dt = CDate(.TextBox1.Value) + Val(.TextBox2.Value)
.TextBox1.Value = dt
.Calendar1.Value = dt
End If
End With
End Sub
我想以特定格式在textbox1中手动输入日期
格式将是-
dd
ddmmm
ddmmmyyy
我不知道如何编写这样的代码
想法是在textbox1中以上述3种格式中的任意一种格式输入日期,然后在用户表单上的日历上选择该格式。在op澄清允许的格式后进行编辑 您可以基于以下代码进行构建
Option Explicit
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim txt As String, dayStr As String, monthStr As String, yearStr As String
Dim okTxt As Boolean
txt = Me.TextBox1.Value
Select Case Len(txt)
Case 2
dayStr = txt
okTxt = okDay(dayStr)
monthStr = month(Now)
yearStr = year(Now)
Case 5
dayStr = Mid(txt, 3, 3)
monthStr = Mid(txt, 3, 3)
okTxt = okDay(Left(txt, 2)) And okMonth(monthStr)
yearStr = year(Now)
Case 7
dayStr = Mid(txt, 3, 3)
monthStr = Mid(txt, 3, 3)
yearStr = Mid(txt, 6, 2)
okTxt = okDay(Left(txt, 2)) And okMonth(monthStr) And okYear(yearStr)
End Select
If Not okTxt Then
MsgBox "Invalid date" _
& vbCrLf & vbCrLf & "Date must be input in one of the following formats:" _
& vbCrLf & vbTab & "dd" _
& vbCrLf & vbTab & "ddmmm" _
& vbCrLf & vbTab & "ddmmmyy" _
& vbCrLf & vbCrLf & "Please try again", vbCritical
Cancel = True
Else
Me.Calendar1.Value = CDate(Left(txt, 2) & " " & monthStr & " " & yearStr)
End If
End Sub
Function okDay(txt As String) As Boolean
okDay = CInt(txt) > 0 And CInt(txt) < 31
End Function
Function okMonth(txt As String) As Boolean
Const months As String = "JANFEBMARAPRMAJJUNJULAUGSEPOCTNOVDEC"
okMonth = InStr(months, UCase(txt)) > 0
End Function
Function okYear(txt As String) As Boolean
okYear = CInt(txt) > 0 And CInt(txt) < 200 '<--| set your "limit" years
End Function
选项显式
私有子文本框1_退出(ByVal Cancel作为MSForms.ReturnBoolean)
Dim txt作为字符串,dayStr作为字符串,monthStr作为字符串,yearStr作为字符串
作为布尔值
txt=Me.TextBox1.Value
选择案例长度(txt)
案例2
dayStr=txt
OKTX=okDay(dayStr)
monthStr=月份(现在)
yearStr=年(现在)
案例5
dayStr=Mid(txt,3,3)
monthStr=Mid(txt,3,3)
okTxt=okDay(左(txt,2))和OkMonthstr(月)
yearStr=年(现在)
案例7
dayStr=Mid(txt,3,3)
monthStr=Mid(txt,3,3)
yearStr=Mid(txt,6,2)
okTxt=okDay(左(txt,2))和okMonth(月)和okYear(年)
结束选择
如果不是,那么
MsgBox“无效日期”_
&vbCrLf&vbCrLf&“日期必须以以下格式之一输入:”_
&vbCrLf和vbTab及“dd”_
&vbCrLf&vbTab和“ddmmm”_
&vbCrLf&vbTab&“ddmmmyy”_
&vbCrLf&vbCrLf&“请重试”,vbCritical
取消=真
其他的
Me.Calendar1.Value=CDate(左(txt,2)和“&monthStr和”&yearStr)
如果结束
端接头
函数okDay(txt作为字符串)作为布尔值
okDay=CInt(txt)>0且CInt(txt)<31
端函数
函数okMonth(txt作为字符串)作为布尔值
Const months As String=“janfebmaraprmajunjulug sepoctnovdec”
okMonth=InStr(月,UCase(txt))>0
端函数
函数okYear(txt作为字符串)作为布尔值
okYear=CInt(txt)>0和CInt(txt)<200'我不确定我是否做错了什么。我右键单击userform并粘贴了上面的代码。现在,当我键入25或25Jan或25Jan17时,代码不会在日历上选择25Jan。我做错了什么当我输入日期为1月25日或17日25日时,代码起作用。br/当我将日期输入为25时,将获取一个错误-运行时错误“13”:类型不匹配,代码为“okDay=CInt(txt)>0且CInt(txt)<31“高亮显示请关闭此帖子,接受原始问题的答案,并为新问题撰写新帖子。在后一种情况下,您最好发布代码尝试,并指定什么不起作用以及原因。非常感谢。正如您在“要将答案标记为已接受,请单击答案旁边的复选标记,将其从灰色变为已填写。”