Excel表格-输入

Excel表格-输入,excel,inputbox,vba,Excel,Inputbox,Vba,有没有办法让日期输入字段在月/日/年之间自动输入“/”? 我当前的表单有SUB,以确保以正确的日期格式输入日期,并进行检查,以确保输入的日期为mm/dd/yyyy,但是我想取消用户需要手动输入“/”的情况,并且在我的研究和测试中没有找到可行的解决方案。非常感谢任何有用的解决方案 谢谢大家! If Me.TourDateText.Value = "" Then MsgBox "Please enter Tour Date.", vbExclamation, "frmEntry"

有没有办法让日期输入字段在月/日/年之间自动输入“/”?
我当前的表单有SUB,以确保以正确的日期格式输入日期,并进行检查,以确保输入的日期为mm/dd/yyyy,但是我想取消用户需要手动输入“/”的情况,并且在我的研究和测试中没有找到可行的解决方案。非常感谢任何有用的解决方案

谢谢大家!

    If Me.TourDateText.Value = "" Then
    MsgBox "Please enter Tour Date.", vbExclamation, "frmEntry"
    Me.FirstNameText.SetFocus
    Exit Sub
    End If

    With Me.TourDateText
    If Not IsDate(.Value) Then
    .SetFocus
    MsgBox "Enter a valid date"
    Exit Sub
    End If
    End With

    If Not IsDate(Me.TourDateText.Value) Then
    MsgBox "The Tour Date field must contain only dates in the format mm/dd/yyyy.", vbExclamation,  "frmEntry"   
    Me.TourDateText.SetFocus    
    Exit Sub
    End If

然后,您可以将下面的内容添加到UserForm中

Private Sub TourDateText_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

 Select Case KeyAscii
  Case Asc("0") To Asc("9")
  Case Else
   KeyAscii = 0
 End Select
 If Len(Me.TourDateText.Text) = 2 Then
  If Val(Me.TourDateText.Text) > 12 Then KeyAscii = 0 Else _
   Me.TourDateText.Text = Me.TourDateText.Text & "/"
 End If
 If Len(Me.TourDateText.Text) = 5 Then
  If Val(Mid(Me.TourDateText.Text, 4, 2)) > 31 Then KeyAscii = 0 Else _
   Me.TourDateText.Text = Me.TourDateText.Text & "/"
 End If
 If Len(Me.TourDateText.Text) >= 10 Then KeyAscii = 0

End Sub
第二版:

Private Sub TourDateText_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

 Debug.Print KeyAscii

 If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
 If Len(Me.TourDateText.Text) = 2 Then
  If Val(Me.TourDateText.Text) > 12 Then KeyAscii = 0 Else _
   Me.TourDateText.Text = Me.TourDateText.Text & "/"
 End If
 If Len(Me.TourDateText.Text) = 5 Then
  If Val(Mid(Me.TourDateText.Text, 4, 2)) > 31 Then KeyAscii = 0 Else _
   Me.TourDateText.Text = Me.TourDateText.Text & "/"
 End If
 If Len(Me.TourDateText.Text) >= 10 Then KeyAscii = 0

End Sub
Private Sub-TourDateText_按键(ByVal-keyscii作为MSForms.ReturnInteger)
调试。打印密钥ASCII
如果KeyAscii<48或KeyAscii>57,则KeyAscii=0
如果Len(Me.TourDateText.Text)=2,则
如果Val(Me.TourDateText.Text)>12,则keyscii=0,否则_
Me.TourDateText.Text=Me.TourDateText.Text&“/”
如果结束
如果Len(Me.TourDateText.Text)=5,则
如果Val(Mid(Me.TourDateText.Text,4,2))>31,则keyscii=0_
Me.TourDateText.Text=Me.TourDateText.Text&“/”
如果结束
如果Len(Me.TourDateText.Text)>=10,则KeyAscii=0
端接头
现在用户可以输入09172014,文本将为09/17/2014。或者输入可以是09[任意键]17[任意键]2014,文本为09/17/2014

此外,月数>12天和天数>31天也将被阻止。这不是最终数据验证,因为它无法检查该月是否有31天。但最终的数据验证已经完成了

问候


Axel

查看
文本框\u Change
事件。您可以使用它来解析输入的文本。我建议使用三个单独的文本框:一个用于月份、一天和一年。这并不罕见,事实上,我认为从用户的角度来看,这可能是意料之中的。您很少看到表单输入要求格式化日期,正是因为验证它们更困难,等等。单独验证它们要容易得多,同时也很容易将它们连接到日期。会有帮助吗?谢谢David Zemensand Siddharth Rout-您的两个建议都很有帮助-但是,由于此用户表单在多台设备上使用,datepicker小部件并不理想,因为我需要在多台具有严格下载策略的计算机上下载该文件,并且有3个单独的框需要对工作簿进行彻底的修改,这需要花一个月的时间来编译。。。Textbox\u Change事件听起来很有希望,@Cor\u Blimey-您以前使用过这种方法吗?您能建议我在哪里可以找到一些示例吗?谢谢大家!@AxelRichter展示了一个按键事件的示例-这比我建议的_Change事件中的快速破解要好,因为它可以在文本提交到文本框之前进行验证,而不是在更改后被触发亲爱的@AxelRichter,感谢您的帮助!我已尝试在表单代码中输入此子项,TourDateText字段现在不再接受输入。我可以选择输入框,但不允许数字或文本输入。你知道这个问题的解决办法吗?谢谢你的帮助,@AxelRichter。我正在使用Excel 2013编写这个用户表单,控件是一个inputbox。我一直在用数字键盘输入数字,我的数字锁目前已打开。。。我不知道为什么它不允许数据输入。我很抱歉我的理解肤浅,我只在vba中编写和编辑了大约3个月,并通过尝试和错误自学。输入更新的sub后在VBA编辑器中返回的ASCII码是:48(0)和57(9).Hm,0和9在文本框中不可见?如果没有,请将
Debug.Print keyacii
放在代码末尾紧靠
end Sub
之前,然后输入0和9重试。打印了哪些ASCII码?使用ASCII Debug.Print KEYSCII键,在sub的末尾,立即对话框显示所有“0”