2016-07-26 11 views
0

参加者が3回のアンケート(1,2,3回)に回答したデータベースがあり、特定の参加者についてどのアンケートが完了したかを判断するフォームを作成しようとしています(ID)を選択し、既存のレコードに対してボタンを無効にします(調査1を追加、調査2を追加、調査3を追加)。レコードが存在する場合にコントロールを有効にする

フォームがリンクされているテーブル(アンケート)には、フィールドIDとSurvey_Number(1〜3)があります。ここで、1人の参加者(ID)は、入力された調査の数に応じて0〜3のエントリを持つことができます。

私は現時点で非常に不安定に動作しています:私は、2番目のコンボボックスが一時的な配列として使用されているカスケーディングコンボボックスアプローチを使用しています(私はこれを謝罪します - 私はコードしません) (最初のコンボボックスで)。

Private Sub Combo29_AfterUpdate() 
Dim i As Integer 

If Not IsNull(Me.Combo29) Then 
    If DCount("ID", "Surveys", "[ID] =" & Me.Combo29) > 0 Then 
    Combo2.RowSource = "SELECT Surveys.Survey_Number " & _ 
         "FROM Surveys " & _ 
         "WHERE Surveys.ID = " & Combo29.Value 
Me.Combo2.Requery 

i = 0 
For i = 0 To (Me.Combo2.ListCount - 1) 

Select Case Me.Combo2.ItemData(i) 
Case "1" 
Me!Command34.Enabled = False 
Case "2" 
Me!Command35.Enabled = False 
Case "3" 
Me!Command36.Enabled = False 
End Select 
i = i + 1 
Next 
    Else 
    MsgBox "This is the first time this participant has responded" 
    Me!Command34.Enabled = True 
    Me!Command35.Enabled = True 
    Me!Command36.Enabled = True 
    Me.Combo2 = Me.Combo2.ItemData(0) 
    End If 
End If 

End Sub 

エントリがないとき、これはうまく動作します(すべてのボタンを有効にします)が、いくつか/ 1調査存在つまりがある場合には、(1)正確にItemDataを読み取れません。 1、2、3が入力されている場合は、ボタン2と3だけが無効になります。

答えて

1

私はあなたが既に持っているコントロールを使用して、これは動作するはずです、Combo2がどのように役に立つかわからないけど:

Private Sub Combo29_AfterUpdate() 

Dim i As Integer 

Me!Command34.Enabled = True 
Me!Command35.Enabled = True 
Me!Command36.Enabled = True 

If Not IsNull(Me.Combo29) Then 
    If DCount("Survey_Number", "Surveys", "[ID] =" & Me.Combo29) > 0 Then 
     Combo2.RowSource = "SELECT Surveys.Survey_Number " & _ 
          "FROM Surveys " & _ 
          "WHERE Surveys.ID = " & Combo29.Value 
     Me.Combo2.Requery 

     With Combo2 
      For i = 0 To .ListCount - 1 
       Select Case .ItemData(i) 
        Case 1 
         Me!Command34.Enabled = False 
        Case 2 
         Me!Command35.Enabled = False 
        Case 3 
         Me!Command36.Enabled = False 
        Case Else 
         'Nothing 
       End Select 
      Next i 
     End With 
    Else 
     Me!Command34.Enabled = True 
     Me!Command35.Enabled = True 
     Me!Command36.Enabled = True 
    End If 

End If 

End Sub 
+0

素晴らしい - これは完全に機能します!コードを掃除していただきありがとうございます。読むのがずっと簡単です。 – Giles

0

フォームの現在のイベントで有効/無効のコードを使用してください。フォーカスを他のレコードに変更すると、有効/無効のコントロールを変更する必要があります。有効/無効のコードは、コンボの更新後のみです。選択された行コントロールを有効/無効にすることはできません。列のすべてのコントロールを有効または無効にします。

関連する問題