2016-07-04 3 views
0

私は最初の使用時にそのリストを構築するコンボボックスを持っています。私は、 "NotInList"が動作するのが慣習的ではないことを知っています - 必要なエントリとは別のテーブルにアイテムを追加するのを無駄にしたくありませんが、ユーザはエントリを受け入れる前に2度考えなければならない。ユーザーがアイテムを追加すると、コンボボックスのデータソースであるため、次のようにダイナミックコンボボックスの警告のリスト

、それが自動的にリスト内の次の時間が表示されます。

Private Sub cmbPROGRAM_NotInList(NewData As String, Response As Integer) 
    If MsgBox("'" & Chr(34) & NewData & Chr(34) & " hasn't been used yet. Add to list? ", vbQuestion + vbYesNo, "Add - " & NewData & "?") = vbYes Then 
     Response = acDataErrAdded 
    End If 

End Sub 

SELECT tbl_SP.PROGRAM 
FROM tbl_SP 
GROUP BY tbl_SP.PROGRAM 
HAVING (((tbl_SP.PROGRAM) Is Not Null And (tbl_SP.PROGRAM)<>"")); 

は、私はこれを試してみましたもちろん、Accessはエラーを解放する前にアイテムが実際に存在することを望んでいます。そして...私がLimitToListを "No"に設定すると、ユーザーは警告を受け取りません。

どのようにこの動作を実現できますか?

[OK]を、私は、ユーザーがYES選択するが、ユーザはNOを選択した場合、私はコンボボックスをクリアするにはどうすればよい「NO」

Public Function ReturnsRecords(strSQL As String) As Boolean 
Dim d As DAO.Database 
Dim arr(1 To 3) As DAO.Recordset 
'Dim rs As DAO.Recordset 
    'assume 3 items in array above 
    Set d = CurrentDb 
    Set arr(1) = d.OpenRecordset(strSQL) 
    ' MsgBox "Record Count is " & arr(1).RecordCount 

    If arr(1).RecordCount > 0 Then 
     ReturnsRecords = True 
    Else 
     ReturnsRecords = False 
    End If 
    Set d = Nothing 


End Function 

Private Sub cmbPROGRAM_BeforeUpdate(Cancel As Integer) 
    Dim strSQL As String 

    strSQL = "Select * from LU_PROGRAM where PROGRAM ='" & Me.cmbPROGRAM & "'" 

    If ReturnsRecords(strSQL) = False Then 

     If MsgBox("'" & Chr(34) & Me.cmbPROGRAM & Chr(34) & " hasn't been used yet. Add to list? ", vbQuestion + vbYesNo, "Add - " & Me.cmbPROGRAM & "?") = vbNo Then 

      Cancel = True 
      ' how do I reset this? Me.cmbPROGRAM.Text = Null 
     End If 

    End If 
    End Sub 

を選択したときに、より複雑になると正常に動作され、これを試してみましたか? me.undoを選択すると、すべてのエントリが元に戻されますが、コンボボックスを消去したいだけです。

ちなみに、フォームが完全に結合していないで、ユーザーが

答えて

0

初の「保存」を選択するまでのエントリを受け入れていない、私はあなたが達成したいものをかなりわからないんだけど...

その後Escapeを押してキャンセルするようにユーザーに教える。これは、Accessアプリケーションを操作する際の必須の知恵です。

コードが正常に動作するようにするには、BeforeUpdateイベントでコントロールの内容を変更することはできません。

Me!cmbPROGRAM.Text = "" 

か:だから、どちらかとAfterUpdateイベントをしようと

Me!cmbPROGRAM.Value = Null 
+0

ありがとうございます。それはそれを挑戦する私の非結合形式です。ルックアップライブラリの作成を避けることを望んでいましたが、最終的には – monty327