アクセス担当のまみです。
データの入力って項目が多くなってくるととっても大変ですね。
いつの間にか一つずつずれて入力してたりすることもあったりしませんか?
読み合わせで間違ったデータを修正していくのって印刷する時間も紙ももったいなかったりします。
同じデータを2度入力して、前回と違うデータが入力されたらテキストボックス等の色でお知らせしてくれたら、印刷する必要もないし、修正箇所がすぐにわかりますね。
今回は、2度目以降の入力時に修正箇所を教えてくれる方法をお伝えしますね。
Contents
前回入力と違う時に色を変える
説明のために「商品コード」ファイルを使用します。同じファイルを使用する方が理解しやすいので、お時間ありましたら、下記の記事から作成してみてください。
最初の入力時にはそのままデータを登録ってところまでは、現在のプログラムでできています。
2度目の入力で前回の入力と同じかどうかをチェックするようにってコードを書いてあげればいいのですが、データを修正する時のコードの応用になるんです。
' 前回入力時と違っていれば背景色を変える Dim db As DAO.Database Dim strSQL As String Dim Rst As DAO.Recordset Set db = CurrentDb strSQL = "select*from T_商品コード where 商品コードNO='" & Me.tx商品コード & "'" Set Rst = db.OpenRecordset(strSQL) If Rst.RecordCount > 0 Then If Me.tx商品名 = Rst!商品名 Then Me.tx商品名.BackColor = vbWhite Else Me.tx商品名.BackColor = 12695295 End If If LTrim(Me.tx金額) = LTrim(Rst!金額) Then Me.tx金額.BackColor = vbWhite Else Me.tx金額.BackColor = 12695295 End If If Me.tx商品名.BackColor = 12695295 Or Me.tx金額.BackColor = 12695295 Then Exit Sub Else MsgBox "次のデータ" Me!tx商品コード = "" Me!tx商品名 = "" Me!tx金額 = "" Me.tx商品名.BackColor = vbWhite Me.tx金額.BackColor = vbWhite Exit Sub End If Else End If
それから、「Dim Rst As DAO.Recordset」はコメントにしておいてくださいね。
そのまま動作確認してみるとわかりますが、エラーになります。
いつもコピーして正解しか知らないと、自分で作ってみた時にエラーになった時の対処がわからないので、そのままやってみるのもいいんじゃないかなって思います!
コードをコピーされたい場合は下記の記事を参考にしてください。
数値と文字列
strSQL = “select*from T_商品コード where 商品コードNO=‘” & Me.tx商品コード & “‘”
このコードを見て何か気が付いた方はとってもよく勉強されているなって思います。
「宛名印刷」プログラム(データ修正の記事で出てきたプログラム)で使用したコードは下記です。
strSQL = “select * from T_住所録 where 登録NO=“ & strData
私は最初ここでとっても時間を費やしました・・・
文字列と数値型でコードが違うって知らなくて、どうして動かないのかわからず、どこが悪いのかわからず・・
今回「商品コードNO」は文字列(短いテキスト)にしてあるので、前回のコードと少し違うんです。
Rst.RecordCount
「Rst.RecordCount」ってフォームに入力された商品コードと同じコードがテーブルにあればその数を返してくれるので、0以外の時に背景色を「12695295」にしてねってコードを書いています。
私は薄いピンクにしましたが、色はお好みで変えてくださいね。
Ltrim
「Ltirim」って空白を取り除いてくれる関数なんです。
どうやら文字列は問題ないんですが、数値型だと空白が入るみたいです。
一度、「Ltirim」をつけないで動作確認してみてください。
同じ数を入れているはずなのに色が変わります。
そして「Ltirim」をつけてみると・・・
二度目の入力時にはそこで処理を終わらせる
「tx商品名」「tx金額」の背景色が違うときには、その時点で処理を終わらせるために「Exit Sub」を、背景色が違っていなくて、二度目の入力の時には「tx商品名」「tx金額」の色を「白」に戻し「空欄」にして「Exit Sub」を入れて終了させておきます。
そうしておかないと同じデータが登録されてしまいます・・
これで、二度目の時に一度目と入力が違う場合にはお知らせしてくれるプログラムができあがりました。
既存データの修正
①「btn修正」ボタンを選択した状態で、プロパティーシートの②「イベント」タブを左クリックします。
「クリック時」を「イベントプロシージャ」にしてコードを開きましょう。
「Private Sub btn修正_Click()」と「End Sub」の間に下記のコードを追加しましょう。
Dim db As DAO.Database Dim strSQL As String Dim Rst As DAO.Recordset Set db = CurrentDb strSQL = "select*from T_商品コード where 商品コードNO='" & Me.tx商品コード & "'" Set Rst = db.OpenRecordset(strSQL) If Rst.RecordCount = 1 Then nRet = MsgBox("修正してよろしいですか?", vbYesNo) If nRet = vbNo Then Exit Sub Else With Rst .Edit .Fields("商品名") = Me!tx商品名 .Fields("金額") = Me!tx金額 .Fields("修正日付") = Now .Update End With End If MsgBox "修正されました" Me!tx商品コード = "" Me!tx商品名 = "" Me!tx金額 = "" Me.tx商品名.BackColor = vbWhite Me.tx金額.BackColor = vbWhite End If Rst.Close
たくさん動作確認したら、「F_データ入力」フォームは保存して終了してくださいね。
まとめ
データ入力する際に、ここが違うよって教えてくれたら入力ミスが減りますね。
印刷もしなくてすむので、紙の削減にもつながりますよ!