2017-06-02 12 views
0

私は、日付の2つのTextBoxフィールドを持つuserformを持っています。テキストボックスを入力して「タブ」を押すか、他のボックスをクリックすると、フィールドはまずワークシートのセルに入力され、テキストボックス内の日付がフォーマットされます(これにより、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

値を書式設定した後、値はテキスト値(文字列)に変更されました。再利用のためには、textvalueをdatevalue()functonによってdatevalueに変更する必要があります。 –

関連する問題