2017-05-24 99 views
0

我的用戶表單有三個單獨的組合框供用戶選擇以下內容:年,月,日(它們不依賴)。例如,如果用戶選擇2017(年),5月(月)和23(當天),我希望vba在我的數據庫表中的第二列中輸入:「2017/05/23」。我希望它完全以這種格式作爲價值。組合框日期格式

下面的代碼不起作用。任何幫助,將不勝感激。

With ws 
.Cells(lRow, 2).Value = Me.cboYear/Me.cboMonth/Me.cboDay.Value 
End With 
+2

普羅蒂普:「不工作」是不是一個很好的WA y來描述你的代碼的功能。 「產生意想不到的垃圾」會更準確。一般來說,你會希望避免在我的問題中「我的代碼不起作用」,而是描述你得到的東西 - 垃圾輸出,運行時錯誤等。 –

+1

你有任何數據驗證阻止我選擇「2017/02/29」還是「2017/04/31」?是否有一個特定的原因,你不想使用日曆控件,它會爲你提供這個? – FreeMan

回答

3

您將年份除以月份,然後再除以當天。這是你的細胞獲得的價值。

改爲建立實際的日期

.Cells(lRow, 2).Value = DateSerial(cboYear, cboMonth, cboDay) 

然後格式,日期你希望的任何方式,使用NumberFormat

.Cells(lRow, 2).NumberFormat = "yyyy/MM/dd" 

DateSerial預計整數值。如果您cboMonth包含字符串(月份名稱),那麼你需要的工作有點困難,因爲它 - 最簡單的可能只是用一個鍵集合 - 指定的字符串鍵時.Add荷蘭國際集團的整數集合:

Static months As Collection 
If months Is Nothing Then 
    Set months = New Collection 
    With months 
     .Add 1, "January" 
     .Add 2, "February" 
     .Add 3, "March" 
     '... 
     .Add 12, "December" 
    End With   
End If 

然後你有一個簡單的查詢:

Dim monthId As Integer 
monthId = months(cboMonth) 

所以你DateSerial是:

.Cells(lRow, 2).Value = DateSerial(cboYear, monthId, cboDay) 
+0

謝謝你,但它給出'運行時錯誤13.類型不匹配'。任何想法爲什麼? – thankseveryone

+0

這些下拉菜單中有什麼? 'DateSerial'需要整數。如果你的月份下拉菜單中包含「May」,那麼你需要一種方法將它與'5'聯繫起來。考慮下拉列中有2列,首先是0寬度,包含值1-12,第二列包含月份名稱。使用組合框「Value」來獲取選定的整數。如果不這樣做,一個鍵集合''May''(字符串鍵)映射到'5'(整數值)也可以起作用。 –

+0

是的,我有四月,五月,六月等到三月,而不是整數。我不確定我是否理解密鑰集合的工作原理。如果你可以顯示代碼,這將是非常有用的。謝謝 – thankseveryone