VBA:需要默认控制值,如果只有1个可能的结果或显示列表如果超过可能的结果
问题描述:
我想写一点代码,在VBA,这将限制在选择列表中的可能值,如果某些标准如果只有一个可能的值,则将控件中的值默认为该可能的值,如果没有可能的值,则返回空列表。VBA:需要默认控制值,如果只有1个可能的结果或显示列表如果超过可能的结果
更具体地说,在一个表单中,我有一个EventDate和ProtocolID。该协议有一个BeginImplementationDate
和EndImplmentationDate
。如果EventDate属于多于1个协议的BeginImplementationDate
和EndImplementationDate
(如果协议仍处于活动状态,则该值可能为空),则需要在下拉列表中显示这些协议的所有ProtocolID。如果只有1个协议符合该标准,则该字段需要默认为符合条件的ProtocolID。如果零协议符合条件,则下拉列表将为空。
答
您可以设置组合框的默认值与小子函数你,例如,可以打开表单时要调用:
Private Sub Form_Load()
Call SetDefaultProtocol
End Sub
Private Sub SetDefaultProtocol()
Dim DefaultValue As String
With Me!ComboProtocol
If .ListCount = 1 + Abs(.ColumnHeads) Then
DefaultValue = .ItemData(Abs(.ColumnHeads))
End If
.DefaultValue = DefaultValue
End With
End Sub
答
以下是我做过什么来解决这个问题。
Private Sub txtEventDate_AfterUpdate()
Dim intProtocolCount As Integer
Dim intProtocolID As Integer
intProtocolCount = DCount("ID", "lu_Protocol", "BeginImplementationDate<=#" & Me.EventDate & "# and Nz([EndImplementationDate],Date())>=#" & Me.EventDate & "#")
If intProtocolCount = 1 Then
intProtocolID = DLookup("ID", "lu_Protocol", "BeginImplementationDate<=#" & Me.EventDate & "# and Nz([EndImplementationDate],Date())>=#" & Me.EventDate & "#")
Me.cmbProtocol = intProtocolID
Me.cmbProtocol.Requery
ElseIf intProtocolCount = 0 Then
MsgBox ("No Protocol is active for this Event Date. If Event Date is correct, please contact the Data Manager to update the Protocol list in the database.")
Me.cmbProtocol.Requery
Else
Me.cmbProtocol.Requery
End If
End Sub
因此您需要将组合框的记录源设置为查询resutl?真是太可惜了,这并不容易:P
@DougCoats你真的很无聊。 – nicomp
@nicomp我喜欢乐于助人,同时simultanouesly是为那些谁需要学习如何更好使用Google –