|
まず、
intN = "Me.txt_BOX_'" & N & ".value'"
のコードでエラーになりますね。
"Me.txt_BOX_'" & N & ".value'" は、"Me.txt_BOX_2.value" というような文字列になりますが、それを数値型の変数に代入はできませんので。
コントロールの名称(文字列)でコントロールの値を参照すには、下記のような式になります。
Me.Controls("txt_BOX_1").Value
あるいは、Controls は規定のプロパティなので省略することもできます。
Me("txt_BOX_1").Value
次に、入力チェックするときのイベントは、更新後処理ではなく更新前処理の方がいいです。条件違反のときは、イベントをキャンセルすれば他のコントロールに移動しません。
自分以外のテキストボックスの重複値をチェックするという処理は共通なので、共通で使える関数を作成して、それを書くテキストボックスに関連付けるのがいいでしう。
フォームモジュールに下記の関数を作成します。
Private Function TyoufukuCheck()
Dim i As Integer
Dim N As Integer
Dim V As Integer
Dim ctl As Control
For i = 1 To 5
Me("txt_BOX_" & i).BackColor = vbWhite '背景色を初期化
Next
Set ctl = Me.ActiveControl '自分自身のコントロール
If IsNull(ctl.Value) Then Exit Function '未入力なら何もしない
N = Val(Mid(ctl.Name, 9)) '自分自身の番号
V = ctl.Value
For i = 1 To 20
If i = N Then
ElseIf V = Me("txt_BOX_" & i).Value Then
Me("txt_BOX_" & i).BackColor = 8421631 '背景色を赤
MsgBox "部品コードが重複しています!", vbCritical, "警告"
ctl.SelStart = 0: ctl.SelLength = 255 '入力文字列を全選択
DoCmd.CancelEvent 'イベントをキャンセル
Exit For
End If
Next
End Function
フォームのデザインビューで部品コード入力用のテキストボックスをすべて選択した状態で、
プロパティの「更新前処理」欄に下記のように設定します。
=TyoufukuCheck()
これで重複した部品コードを入力した場合は、それを修正するまでテキストボックスから抜け出せません。
なお、部品コードは数値型との前提です。また、数値以外を入力した場合のチェックも追加したほうがいいでしょう。
|
|