我有一个下拉框,项目取决于区域设置:
interface
稍后我在此代码中使用所选值:
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。 (擅长匈牙利语)为什么?
如果月份取决于区域设置,它应该有效...... (或者我应该将下拉框中的值转换为数字吗?)
答案 0 :(得分:0)
不是自己写下所有月份(并且可能存在拼写错误的风险),而是使用以下方法来编写月份"名称"为你:
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)
答案 1 :(得分: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