アクセスVBAで決まった文字数しか入力できないようにしよう

 

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

 

データを入力する際に、伝票番号の桁数が決まっていたり、社員コードは5桁とか決まっていたりすることがあると思います。

桁数が決まっているのに、桁が多かったり少なかったり。入力ミスってやっぱりあるんです・・・

 

だけど、最初から決まった桁数(文字数)しか入力できなかったら、入力ミスが随分減りますね。

 

そんな機能をVBAで作成してみましょう!

 

フォームからデータの登録

 

では、「商品コード」ファイルを開きましょう。

 

「商品コード」ファイルは下記の記事で作成してみてくださいね!

 

アクセスのテーブルやフォームの作成に慣れてしまおう!

2018年10月19日
 
 
「登録」ボタンクリックで、テーブルにデータが登録されるようにしてみましょう!
 
 
(はてな君)
データ入力フォームからデータの登録ができるようにコード書けるよ!
 
 
 
(あいちゃん)
はてな君はVBA面白くなってきてるみたいですね!どんどん吸収してくれてる。

 

 

フォームからのデータ登録については下記の記事で確認してみてくださいね!

 

【Access】vbaでフォームからレコード追加しよう

2018年9月24日
 
 
 
 

①「btn登録」ボタンを選択した状態で、プロパティーシートの②「イベント」タブを左クリックします。

③「クリック時」を「イベントプロシージャ」にしてコードを開きましょう。

 

 

「Private Sub btn登録_Click()」と「End Sub」の間に下記のコードを記載します。

 

 

Private Sub btn登録_Click()

'    必須項目のメッセージボックス
    If Me.tx商品コード = "" Then
        MsgBox "商品コードが入力されていません"
        Exit Sub
    Else
    End If
    
    If Me.tx商品名 = "" Then
        MsgBox "商品名が入力されていません"
        Exit Sub
    Else
    End If
    
    If Me.tx金額 = "" Then
        MsgBox "金額が入力されていません"
        Exit Sub
    Else
    End If
    
    
    Dim Rst As DAO.Recordset
    Set Rst = CurrentDb.OpenRecordset("T_商品コード", dbOpenTable)
    
    With Rst
        .AddNew
        .Fields("商品コードNO") = Me!tx商品コード
        .Fields("商品名") = Me!tx商品名
        .Fields("金額") = Me!tx金額
        .Fields("登録日付") = Now
        .Update
    End With
    
    Rst.Close
    Set Rst = Nothing
    
    MsgBox "データが登録されました"
    
        Me!tx商品コード = ""
        Me!tx商品名 = ""
        Me!tx金額 = ""

        
'フォーカスを当てる
    Me!tx商品コード.SetFocus

 

ここまでは、上の記事でご紹介したデータ登録と同じです。

しっかり動作確認をしておいてくださいね。

 

コードをコピーされたい場合は下記の記事を参考にしてください。

関連記事
 
 
 
 
 
(はてな君)
データ登録前にもやったことあるから大丈夫だよ~。動作確認しないとダメ~?

 

(あいちゃん)
動作確認って大事なんです!エラーが起こった時に、ここまではちゃんと動いていたってわかっていれば、それ以降の作業のどこかに間違いがあるってわかるでしょ?だけど、最初から動作確認してなかったら・・・どこが悪いのやら・・・

 

(はてな君)
そっかぁ。データ登録は出来てるはずだからって思ってたら実はデータ登録の部分が間違ってたとかあるんだぁ。

 

(あいちゃん)
そういうこと!結局自分のためなんです!

 

 

実際今回のプログラムは別のファイルからコピーしてきたのですが、今回のテキストボックスの名前に変更するのに2か所ほど間違ってまして・・・

エラーが出ました・・・

動作確認とっても大事なので、楽しみながらやってくださいね。

 

そうそう忘れるところでした!動作確認して気が付いてくれていたかもしれません。

 

「Private Sub Form_Load()」と「End Sub」の間に下記のコードを追加しておいてくださいね。

        Me!tx商品コード = ""
        Me!tx商品名 = ""
        Me!tx金額 = ""

 

なぜこのコードが必要なのかは・・・

下記の記事をどうぞ!

 

Accessフォーム読み込み時の処理はココに記載!

2018年9月27日
 
 
それから、動作確認をしていて気が付きました・・・
必須項目が入っていないとメッセージボックスが表示されるようにしていますが、その後は、「OK」を左クリックしたら、フォーカスがあたるようになって欲しいですね!
 
 
 
(はてな君)
「Me.tx商品コード.SetFocus」とかいれたらいいんだ!
 

 

(あいちゃん)
どこに入れたらいいかもわかるかな?

 

(はてな君)
えっと~。メッセージボックスのあと!

 

「Me.tx商品コード.SetFocus」「Me.tx商品名.SetFocus」「Me.tx金額.SetFocus」をそれぞれのメッセージボックスの後に入れておきましょう!

 

 

 

文字数の制限

 

ようやく今回の本題、文字数を制限してみましょう。

そうだな、商品コードは必ず5桁と決まっているとしましょう。

5桁よりも多くても少なくても入力できないように設定してみましょう!

 

(はてな君)
そんなことができるんだ!すごいね!

 

 

 

①「tx商品コード」を選択した状態で、プロパティーシートの②「イベント」タブを左クリックします。

③「フォーカス喪失時」を「イベントプロシージャ」にしてコードを開きましょう。

 

「Private Sub tx商品コード_Exit(Cancel As Integer)」と「End Sub」の間に下記のコードを追加しましょう。

 

 

'桁数を制限する

    If Len(tx商品コード) <> 5 Then
        MsgBox "桁数が違います"
        Cancel = True
    Else
    End If

 

 

「len」って文字数を数えてくれる関数なんです。

Len(tx商品コード)でtx商品コードの文字数を数えてくれるので、5文字じゃなかったら、「桁数が違います」ってメッセージボックスが表示されるようにしています。

Cancel = Trueは、tx商品コードからフォーカスが移動しないようにしてくれます。

 

アクセスvbaフォーカスを移動させない方法!

2018年10月8日
 
 

さっそく「F_データ入力」をフォームビューで開いて動作確認してみましょう!

 

 

(はてな君)
桁が多くても少なくてもメッセージが出た!5桁になるまでカーソルも動かないから桁数を間違えてって入力はなくなるね!

 

まとめ

 

データ入力って気をつけていてもやっぱり入力ミスってあるんですね。

なるべく入力ミスが少なくなるようなプログラムが作成できると嬉しいですね!

 

 

スポンサーリンク