Excel VBA - 无法在Userform中的TextBox中更改年份日期格式

时间:2017-06-02 21:26:15

标签: excel vba excel-vba date

我有一个带有两个TextBox字段的userform用于日期。当我填写文本框并按“tab”或单击另一个框时,该字段将首先填写工作表上的单元格,然后在文本框中格式化日期(这允许以不同的格式输入日期,例如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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

Sheets("Inputs").Range("C18").Value = Format(DateValue(TextBox_StartDate.Value), "mmm dd, yyyy")

答案 1 :(得分:0)

我弄明白了这个问题。将细胞C18和C19格式化为dd-mmm。为了使代码正常工作,年份值必须包含在格式中。更改格式为dd-mmm-yy或mmm dd,单元格C18和C19中的yyyy为我解决了问题。

感谢您的帮助!