Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


941 / 9994 ←次へ | 前へ→

【12359】Re:複数のテキストボックスに入力した値の重複確認について
回答  hatena  - 13/6/27(木) 10:17 -

引用なし
パスワード
   まず、

 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()

これで重複した部品コードを入力した場合は、それを修正するまでテキストボックスから抜け出せません。


なお、部品コードは数値型との前提です。また、数値以外を入力した場合のチェックも追加したほうがいいでしょう。

1,110 hits

【12358】複数のテキストボックスに入力した値の重複確認について ちゃぴんこくん 13/6/27(木) 0:17 質問[未読]
【12359】Re:複数のテキストボックスに入力した値の... hatena 13/6/27(木) 10:17 回答[未読]
【12360】【御礼】複数のテキストボックスに入力した... ちゃぴんこくん 13/6/28(金) 19:19 お礼[未読]
【12361】Re:【御礼】複数のテキストボックスに入力... hatena 13/6/28(金) 19:50 回答[未読]

941 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078191
(SS)C-BOARD v3.8 is Free