2017-03-07 6 views
2

私はアイテムが地域の設定に応じている、ドロップダウンボックスを持っている:それは動作しますが、ドイツの環境Cdate()は英語の月のみで動作するのはなぜですか?

Year_1 = 2017 'integer 
Day_1 = 1 'integer 
Date_from_userform = CDate(Year_1 & "-" & UserForm1.ComboBox1.Value & "-" & Day_1) 'date 

Private Sub UserForm_Initialize() 
Select Case Application.International(XlApplicationInternational.xlCountryCode) 
    Case 1: 'English 
    With ComboBox1 
     .AddItem "January" 
     ...etc 
    End With 
    Case 36: 'Hungarian 
    With ComboBox1 
     .AddItem "Január" 
     ...etc 
    End with 
    Case 49: 'German 
     With ComboBox1 
      .AddItem "Januar" 
      ...etc 
    End with 
End Select 
End Sub 

後、私はこのコードで選択した値を使用します完璧ですが、ハンガリーの環境でテストしましたが、毎回タイプの不一致があります。

Cdateは2017-Január-1を受け入れません。 (Thはハンガリー人だった)なぜ?

月は地域の設定に依存する場合、それが動作するはずです... (または私は数字にdropdownboxから値を変換する必要がありますか?)

+0

「CDate」は、Excel言語ではなく、Windowsの地域設定を反映します。 – GSerg

+0

いずれの場合でも、ローカライズされた月の名前を解析するべきではありません。ドロップダウンリストで[マルチカラムリスト](http://stackoverflow.com/q/6973287/11683)を作成し、キャプション(ローカライズされた月名)と値(月番号)に別々の列を使用します。 – GSerg

答えて

0

Format関数、DateSerial関数、ComboBox1.ListIndexプロパティを使用します。

Private Sub CommandButton1_Click() 
Year_1 = 2017 'integer 
Day_1 = 1 'integer 
Date_from_userform = DateSerial(Year_1, ComboBox1.ListIndex + 1, Day_1) 
End Sub 

Private Sub UserForm_Initialize() 
For i = 1 To 12 
    ComboBox1.AddItem Format(DateSerial(Year(Date), i, 1), "mmmm") 
Next 
End Sub 
0

代わりのすべての月を自分(とリスクの可能性aを書きますスペルミス)私はあなたのために数ヶ月、「名前」を書くために、次のアプローチを使用したい:その後

Public Sub getMonthNamesWrittenOutInDifferentLanguages() 

Dim i As Integer 

'Hungarian: 
For i = 1 To 12 
    Debug.Print Application.WorksheetFunction.Text(DateSerial(2017, i, 1), "[$-40e]MMMM") 
Next i 

'English: 
For i = 1 To 12 
    Debug.Print Application.WorksheetFunction.Text(DateSerial(2017, i, 1), "[$-809]MMMM") 
Next i 

'German: 
For i = 1 To 12 
    Debug.Print Application.WorksheetFunction.Text(DateSerial(2017, i, 1), "[$-de-DE]MMMM") 
Next i 

End Sub 

は、あなたが簡単に可能なすべての月名を通過し、日付に戻ってそれらを変換するために同じコードを使用することができます。

strDate = "2017-Januar-05" 

For i = 1 To 12 
    strDate = Replace(strDate, Application.WorksheetFunction.Text(DateSerial(2017, i, 1), "[$-de-DE]MMMM"), i) 
Next i 

Debug.Print IsDate(strDate) 
Debug.Print CDate(strDate) 
+0

ねえ、ありがとう!私はあなたの両方に緑のダニを与えることができたらいいと思う。 – randomname

関連する問題