アクセスVBAテキストボックスの背景色を変えてみよう!

 

アクセス担当のまみです。

 

データの入力って項目が多くなってくるととっても大変ですね。

いつの間にか一つずつずれて入力してたりすることもあったりしませんか?

読み合わせで間違ったデータを修正していくのって印刷する時間も紙ももったいなかったりします。

 

同じデータを2度入力して、前回と違うデータが入力されたらテキストボックス等の色でお知らせしてくれたら、印刷する必要もないし、修正箇所がすぐにわかりますね。

今回は、2度目以降の入力時に修正箇所を教えてくれる方法をお伝えしますね。

 

Contents

前回入力と違う時に色を変える

 

説明のために「商品コード」ファイルを使用します。同じファイルを使用する方が理解しやすいので、お時間ありましたら、下記の記事から作成してみてください。

 

最初の入力時にはそのままデータを登録ってところまでは、現在のプログラムでできています。

2度目の入力で前回の入力と同じかどうかをチェックするようにってコードを書いてあげればいいのですが、データを修正する時のコードの応用になるんです。

 

 

関連記事
 
 
 
 
では「商品コード」ファイルを開き、コードの画面を表示し、「btn登録」ボタンの必須項目チェックの後に下記のコードを追加しましょう。

 

'    前回入力時と違っていれば背景色を変える

    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_データ入力」フォームは保存して終了してくださいね。

 

まとめ

 

データ入力する際に、ここが違うよって教えてくれたら入力ミスが減りますね。

印刷もしなくてすむので、紙の削減にもつながりますよ!

 

 

スポンサーリンク