2017-09-24 2 views
0

VBAでは、特定の条件の場合に選択リストの可能な値を制限するコードを記述しようとしていますまたは可能な値が1つのみの場合は、コントロールの値をその1つの可能な値にデフォルト設定するか、可能な値がない場合はnullリストを返します。VBA:可能な結果が1つだけの場合、デフォルトの制御値にする必要があります。

具体的には、フォームでは、私はEventDateとProtocolIDを持っています。プロトコルはBeginImplementationDateEndImplmentationDateです。 EventDateが2つ以上のプロトコルのBeginImplementationDateEndImplementationDate(プロトコルがまだアクティブな場合はnullでもかまいません)の間にある場合、これらのプロトコルのすべてのProtocolIDをドロップダウンリストに表示する必要があります。 1つのプロトコルのみがその基準を満たしている場合、フィールドは、修飾するProtocolIDにデフォルトする必要があります。ゼロプロトコルが基準を満たす場合、ドロップダウンリストは空になります。

+0

コンボボックスのレコードソースをクエリresutlに設定する必要がありますか?あなたは本当に退屈なのですか?P <3 –

+1

@DougCoatsあなたは本当に退屈しなければなりません。 – nicomp

+0

@nicomp私は助けてくれるのが好きですが、simultanoueslyはグーグルを良くする方法を学ぶ必要がある人のためにいくらかサディスティックです。 –

答えて

0

フォームを開いたときに、たとえば、呼び出すことができます小さなサブ関数でコンボボックスののDefaultValueを設定することができ、次の

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 
0

が、私は問題を解決するために何をしたかです。

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