「値集合タイプ=値リスト」で実現させようとしているようですが、元になるデータがテーブルに存在しているのであれば、「値集合タイプ=テーブル/クエリ」で実現させることにした方が良いと思います。
簡単ですが、サンプルです。
※コンボボックス用のテーブル「テーブル1」
・フィールド1
[ID]/数値型/主キー
・フィールド2
[項目名]/テキスト型
※フォームをコンボボックスに作成してください「コンボ0」
'イベント:フォーム_開く時
Private Sub Form_Open(Cancel As Integer)
With Me.コンボ0
'値集合タイプ
.RowSourceType = "Table/Query"
'値集合ソース
.RowSource = "SELECT 項目名 FROM テーブル1 Order By ID"
'入力チェック
.LimitToList = True
End With
End Sub
'イベント:コンボ0_リスト外入力時
Private Sub コンボ0_NotInList(NewData As String, Response As Integer)
Static flgBusy As Boolean
Dim strSQL As String
'エラーをシステムで通知させない
Response = acDataErrContinue
'排他状態の時は未処理
If flgBusy Then
Exit Sub
End If
'排他フラグを立てる
flgBusy = True
'問い合わせ
If MsgBox("追加しますか", vbYesNo) = vbNo Then
Exit Sub
End If
'IDを最大値より1を増やし、新たな項目を登録する
strSQL = ""
strSQL = strSQL & "INSERT INTO テーブル1 (ID,項目名)" & vbCrLf
strSQL = strSQL & "SELECT IIf(IsNull(Max(ID)),0,Max(ID)) + 1 , '" & NewData & "'" & vbCrLf
strSQL = strSQL & "FROM テーブル1" & vbCrLf
Call CurrentDb.Execute(strSQL)
'コンボのリフレッシュ
Me.コンボ0.Text = ""
Me.コンボ0.Requery
'最終行を選択
Me.コンボ0.ListIndex = Me.コンボ0.ListCount - 1
'排他フラグ解除
flgBusy = False
End Sub
お礼
あぁ、なんかトンチンカンな補足質問だったです。 お蔭様で、バッチリ解決です。ありがとう御座いました。 _
補足
ありがとうございます。 解決しました。 フォーム側からVBで直接テーブル操作したことがないので困ってました。 >コメントにして下さい ですが、その部分はそのままにして役目が終わったらまた元に戻す、ということなのですが・・・(VB上で) 試し実行中のエラーメッセージを出したいわけで。