VBA:需要默认控制值,如果只有1个可能的结果或显示列表如果超过可能的结果

问题描述:

我想写一点代码,在VBA,这将限制在选择列表中的可能值,如果某些标准如果只有一个可能的值,则将控件中的值默认为该可能的值,如果没有可能的值,则返回空列表。VBA:需要默认控制值,如果只有1个可能的结果或显示列表如果超过可能的结果

更具体地说,在一个表单中,我有一个EventDate和ProtocolID。该协议有一个BeginImplementationDateEndImplmentationDate。如果EventDate属于多于1个协议的BeginImplementationDateEndImplementationDate(如果协议仍处于活动状态,则该值可能为空),则需要在下拉列表中显示这些协议的所有ProtocolID。如果只有1个协议符合该标准,则该字段需要默认为符合条件的ProtocolID。如果零协议符合条件,则下拉列表将为空。

+0

因此您需要将组合框的记录源设置为查询resutl?真是太可惜了,这并不容易:P

+1

@DougCoats你真的很无聊。 – nicomp

+0

@nicomp我喜欢乐于助人,同时simultanouesly是为那些谁需要学习如何更好使用Google –

您可以设置组合框的默认值小子函数你,例如,可以打开表单时要调用:

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