2017-06-02 51 views
0

我有一個用戶窗體有兩個日期的文本框字段。當我填入文本框並按下「選項卡」或單擊其他框時,該字段將首先在工作表上填寫單元格,然後在文本框中格式化日期(這允許以不同格式進行日期輸入,例如1/1/17,無論它應該返回爲mmm dd,yyyy)。Excel VBA - 無法更改日期格式在TextBox中的用戶表單

這是我的問題。一切工作萬無一失,但全年始終停留在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 

任何幫助將不勝感激!

+0

我複製了你的代碼,我沒有得到你的錯誤。它表現得像我想你想的那樣。我使用瑞典語區域設置運行Excel 2016。 – Sam

+0

我沒有收到錯誤。我的問題是,當日期在文本框中自動填充時,無論我投入多少年,它總是以2017年爲填充。 – Vietson

+1

您的代碼適用於我。例如。如果我在「TextBox_StartDate」中輸入「5/6/15」,它會正確地將其轉換爲「2015年6月5日」。我不喜歡**的方式**你是這樣做的(我寧願把日期當作日期,而不是將它們轉換爲文本,然後再轉換爲日期,然後再將它們轉換爲文本),但它似乎工作。 – YowE3K

回答

0

我想通了這個問題。將細胞C18和C19格式化爲dd-mmm。爲了使代碼正常工作,年份值必須包含在格式中。更改格式爲dd-mmm-yy或mmm dd,yyyy在單元格C18和C19中解決了我的問題。

感謝您的幫助!

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

您應該提供更多的細節來描述您的代碼並解釋它如何回答問題。見[回答]。 –

+0

格式化值後,您的值更改爲文本值(字符串)。爲了重用,您必須通過datevalue()functon將文本值更改爲datevalue。 –