【发布时间】:2017-06-02 21:26:14
【问题描述】:
我有一个用户表单,其中包含两个用于日期的 TextBox 字段。当我填写文本框并按“制表符”或单击另一个框时,该字段将首先填写工作表上的一个单元格,然后在文本框中格式化日期(这允许以不同格式输入日期,例如 1/ 1/17,不管它应该返回为 mmm dd, yyyy)。
这是我的问题。一切都完美无缺,但年份总是停留在 2017 年。我尝试以所有格式输入日期,月份和日期会相应更改,但年份仍然是 2017 年。
下面是代码:
Private Sub Button_OK_Click()
Sheets("Inputs").Range("C18").Value = Format(TextBox_StartDate.Value, "mmm dd, yyyy")
TextBox_StartDate.Value = Format(Sheets("Inputs").Range("C18").Text, "mmm dd, yyyy")
Sheets("Inputs").Range("C19").Value = Format(TextBox_EndDate.Value, "mmm dd, yyyy")
TextBox_EndDate.Value = Format(Sheets("Inputs").Range("C19").Text, "mmm dd, yyyy")
If TextBox_StartDate.Value = "" Or TextBox_EndDate.Value = "" Then
MsgBox ("Start and End Dates must be filled in to continue.")
ElseIf Sheets("Inputs").Range("C18").Value > Sheets("Inputs").Range("C19").Value Then
MsgBox ("End Date must be after Start Date.")
ElseIf Not (IsNumeric(Sheets("Inputs").Range("C18").Value) And IsNumeric(Sheets("Inputs").Range("C18").Value)) Then
MsgBox ("Date fields must be filled in properly.")
Else
Continue = True
Unload Me
End If
End Sub
Private Sub TextBox_StartDate_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 9 Then
Sheets("Inputs").Range("C18").Value = Format(TextBox_StartDate.Value, "mmm dd, yyyy")
TextBox_StartDate.Value = Format(Sheets("Inputs").Range("C18").Text, "mmm dd, yyyy")
Sheets("Inputs").Range("C19").Value = Format(TextBox_EndDate.Value, "mmm dd, yyyy")
TextBox_EndDate.Value = Format(Sheets("Inputs").Range("C19").Text, "mmm dd, yyyy")
End If
End Sub
任何帮助将不胜感激!
【问题讨论】:
-
我复制了您的代码,但没有收到您的错误。它的行为就像我认为你会喜欢的那样。我使用瑞典语言环境运行 Excel 2016。
-
我没有收到错误。我的问题是,当日期自动填充到文本框中时,无论我输入哪一年,它总是填写为 2017 年。
-
您的代码对我有用。例如。如果我在
TextBox_StartDate中输入“5/6/15”,它会正确地将其转换为“2015 年 6 月 5 日”。我不喜欢您这样做的方式(我更愿意将日期视为日期,而不是将它们转换为文本,然后再返回日期,以便将它们转换为文本再次),但它似乎工作。 -
你可能填错了单元格?在即时窗口(alt g)中尝试,并使用“debug.print format(....)”