我之前提出过一个问题,但我并没有真正表达我的想法。我有一个文本框,要求用户在其中写入日期。然后,他可以按一个按钮,根据其他一些文本框中的条目生成报告。生成的报告中的日期格式为“dd / MM / yy”非常重要。
我使用此代码:
Dim a as String
a = Format(Textbox1.text, "dd/MM/yy")
除非用户以“dd.MM.yy”格式输入日期,例如15.05.15,否则一切正常。发生这种情况时,生成的报告中的日期始终为“30/12/99”。 some1能帮助我理解为什么会这样吗?
编辑:关于重复问题。在上一个问题中,我问我如何从文本框中提取字符并以我想要的格式形成日期。此问题是关于在文本框(dd.MM.yy)中使用特定类型的格式时发生的特定问题,该格式始终打印特定日期(30/12/99)。
答案 0 :(得分:4)
30/12/1899是等效于0的日期,这是您尝试将String
的格式转换为Date
时获得的结果。
要验证这一点,请在文本框中键入任何旧垃圾,然后输出30/12/99。
关于使用DateTimePicker
控件,请参阅我对您的其他问题here
答案 1 :(得分:2)
您可以在文本框中选择允许的键。
例如如下:
'1 form with:
' 1 textbox : name=Text1
Option Explicit
Private Sub Text1_KeyPress(KeyAscii As Integer)
' Caption = CStr(KeyAscii)
KeyAscii = DateOnly(KeyAscii)
End Sub
Private Function DateOnly(intKey As Integer) As Integer
Dim intResult As Integer
intResult = intKey
Select Case intKey
Case vbKeyBack 'allow backspace
Case vbKey0 To vbKey9 'allow numbers
Case 45 'allow -
' Case 46 'change . into /
' intResult = 47
Case 47 'allow /
Case Else 'dont allow anything else
intResult = 0
End Select
DateOnly = intResult
End Function
这只是限制了用户可以输入的密钥,您仍然需要注意其他无效输入
<强> [编辑] 强>
我在上面的代码中添加了Case 45
。
在选择的情况下,您可以指定每个键输入的内容:
您可以通过取消注释Text1_KeyPress中的第一行来找出特定键具有的ascii值,以便ascii值将以表单标题显示
答案 2 :(得分:1)
IsDate 功能也很有用。这将检查输入的日期是否有效,如果是,则返回True。
IsDate ("21/05/2015") 'returns 'True'
IsDate ("21.05.2015") 'returns 'False'
您可以使用替换功能更改“。”到“/”
mydate = Replace("21.05.2015", ".", "/") ' gives "21/05/2015"