我们如何将日期字段绑定到组合框(行源类型=值列表)?
我们在VBA中的Form Load中设置了这样的组合框:
For i = 0 To 6
Dim strValueMember As String
Dim strDisplayMember As String
strValueMember = format(DateAdd("d", 0 + i, anchorDate), "dd-MMM-yy") & ";"
strDisplayMember = format(DateAdd("d", 0 + i, anchorDate), "ddd dd-MMM-yy") & ";"
strItems = strItems & strValueMember & strDisplayMember
Next i
strItems = Left(strItems, Len(strItems) - 1)
Me.cboDeliveryDate.RowSource = strItems
这给了我们一个整洁的小组合框,用户可以从7天的列表中选择。作为奖励,他可以看到星期几(实际上,对于这个最终用户,日期名称非常重要)。
组合框有两列,一列值列(用于真实日期)和一列显示栏(用于显示日期名称)。
但是我们设置的绑定列存在问题:
如果我们将绑定列设置为列 0 ,它显然有效,但存储的值是31/12 / 1899,1 / 1 / 1900,2 / 1/1900等。所以它是只需阅读组合的listindex并将其转换为日期。
如果我们将绑定列设置为列 1 ,它实际上的工作原理是将所选值写回数据库。但它永远不会显示在表单上,因此用户显然不会觉得他的编辑已经进行了
如果我们将绑定列设置为列 2 ,我们会收到Not In List错误。
以上所有内容均适用于我们是否将dd-MMM-yy
用于strValueMember或(如@HansUp答案所示,yyyy-m-d
)。
答案 0 :(得分:1)
在我看来, cboDeliveryDate 有2列, strValueMember 作为第一列,它也是绑定列,绑定到日期/时间字段。通过以yyyy-m-d日期格式格式化 strValueMember ,这对我有用。
Private Sub Form_Load()
Dim i As Long
Dim anchorDate As Date
Dim strValueMember As String
Dim strDisplayMember As String
Dim strItems As String
anchorDate = Date
For i = 0 To 6
strValueMember = Format(DateAdd("d", i, anchorDate), _
"yyyy-m-d") & ";"
strDisplayMember = Format(DateAdd("d", i, anchorDate), _
"ddd dd-MMM-yy") & ";"
strItems = strItems & strValueMember & strDisplayMember
Next i
strItems = Left(strItems, Len(strItems) - 1)
Me.cboDeliveryDate.RowSource = strItems
End Sub
我不知道 anchorDate 的来源,所以我只是取代了今天的日期。
答案 1 :(得分:0)
虽然有点复杂,但您还可以创建一个返回所需值列表的函数。 请参见示例here。