2017-05-24 159 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