アクセスフォームがありますが、コンボボックスに項目がない場合に項目を追加する方法を知りたいです。私のコンボボックスは値モードです。
2 に答える
残念ながら、フォームをデザイン モードに変更して新しい値を追加しない限り、rowsource を永続的に変更することはできません。コードでこれを行うことは可能ですが、人々が作業しているときはお勧めできません。最も簡単な方法は、小さなテーブルを作成し、それに値を追加することです。フォームを閉じると、新しい値が保存されます。
Allen Browne は、これを行う方法について説明しています: http://allenbrowne.com/ser-27.html
これは彼が示すアイデアの 1 つです。
Private Sub CategoryID_NotInList(NewData As String, Response As Integer)
Dim strTmp As String
'Get confirmation that this is not just a spelling error.
strTmp = "Add '" & NewData & "' as a new product category?"
If MsgBox(strTmp, vbYesNo + vbDefaultButton2 + vbQuestion, "Not in list") = vbYes Then
'Append the NewData as a record in the Categories table.
strTmp = "INSERT INTO Categories ( CategoryName ) " & _
"SELECT """ & NewData & """ AS CategoryName;"
DBEngine(0)(0).Execute strTmp, dbFailOnError
'Notify Access about the new record, so it requeries the combo.
Response = acDataErrAdded
End If
End Sub
limit to list
プロパティを trueに設定する必要があります。
次に、コンボ ボックスに値を追加する可能性のある On Not In List イベントにコードを追加します。ここにチュートリアルがあります。または、他の回答を表示できます。
通常は、コンボ ボックスの値を格納するテーブルを使用する方がよいことに注意してください。値リストを使用すると、ショートカット メニューを無効にしない限り、ユーザーはコンボ ボックスを右クリックして選択Edit List Items...
し、リストに制限するように設定されている場合でもリストを変更できます...これにより、フィールドに設定しようとしている制限が効果的に無効になります.