今回はテキストボックスやコンボボックスに入力したデータを登録する時に、空欄(入力漏れ)がないかチェックするコードを書いていきます。

 

例えばネットで買い物をする時に個人情報を入力しますが、空欄があると「○を入力して下さい」みたいな感じで表示されますよね。

 

あれを再現します。それではいきましょう。

スポンサーリンク

登録時に空欄(入力漏れ)がないかチェックするコードを書く

ではまず医薬品新規登録画面の「登録ボタン」ダブルクリックして下さい。

 

vba2-13-2上の画像のようになりましたね。

 

これは「btnRegisterをクリックした時、以下を実行する」という意味になります。

 

新規登録画面に入力されたデータに空欄がないかをチェックするコードをここに書いていきますが、とても重要なステートメントがあります。

If~Then…ステートメント

医薬品新規登録画面で一番重要なのは薬品名。これは絶対に登録しなければなりません。

 

そこで「薬品名が入力されていないのに、登録ボタンを押してしまった場合の動作」を書いていきましょう。

 

上の画像の赤枠で囲った部分がそのコードです。それでは順番に解説していきます。

Private Sub btnRegister_Click()
If txtDname.Text = “” Then
MsgBox “医薬品名を入力して下さい”, vbExclamation, “確認”
txtDname.SetFocus
Exit Sub
End If
End Sub

 

まず覚えて欲しいのが、下のIf~Then…ステートメントです。

If ~Then…End If

意味は「もし~ならば…する」

 

今回は

If txtDname.Text = “” Then

となっていますね。

 

上記のTextですが、Valueとの違いについてここで知っておきましょう。

TextValueの違いとは?

valueは文字通り「値」です。入力したデータそのもの。一方textは「変換された文字列」になります。

 

みなさんもたまに使いませんか?Excelでセルの表示形式を「通貨」にしたりとか。

 

セルの表示形式を「通貨」にした時、セルに「10000」と入力すると「¥10000」と表示されますよね。

 

この場合

  • value→10000
  • text→¥10000

となります。

 

valueは実際に入力した値、textはセルに表示されている値といったイメージです。

 

戻ります。

If txtDname.Text = “” Then

「””」「空欄」という意味です。ただ場合により2つの意味を持ちます。

 

「txtDnameが空欄である」「txtDnameを空欄にする」です。

 

ここでは「txtDnameが空欄である」という意味で使用しています。

 

なので1行面の意味は「txtDnameが空欄であるならば」となります。

スポンサーリンク

メッセージボックス関数とは?

2行目いきましょう。

MsgBox “薬品名を入力して下さい”, vbExclamation, “確認”

まずは前半の「MsgBox”薬品名を入力して下さい”,」から解説していきます。

 

これは「メッセージボックスに薬品名を入力して下さい、と表示する」という意味になります。

 

上の画像を見て下さい。これがメッセージボックスです。4種類あります。

 

次に「vbExclamation」。

 

これは上の画像で黄色の三角形に!と表示されている絵(左上)がありますよね。それを意味します。

 

他の画像を使いたい場合は以下のようにします。

  • 「?マーク」→vbQuestion
  • 「iマーク」→vbInformation
  • 「×マーク」→vbCritical

ここでは注意喚起なので、一番左上のvbExclamationがちょうどいいんじゃないでしょうか。

 

続いて「”確認”」これは各々のメッセージボックスの画像の左上を見てください。確認と表示されていますね。枠に表示したい文字列をここに入れます。

 

まあこれはぶっちゃけなくてもいいですけどね(笑)。

 

「面倒なのでいらない」という場合は「,”確認”」「,」もしっかり削除するようにして下さい。エラーが発生します。

 

ちなみになにも入力しない時は「Microsoft Excel」と表示されるようになっています。

SetFocusメソッド

次に3行目。

txtDname.SetFocus

これはtxtDnameをSetFocusする、つまり…「テキストボックスtxtDnameにカーソルを合わせる」という意味です。

 

登録ボタンを押したが、薬品名が入力されていなかった。この時、メッセージボックスのOKボタンを押した後に何をしますか?

 

当然薬品名を入力しますよね?

 

だったらすぐ入力できるようにするために、テキストボックスにカーソルを合わせてあげると使用者は楽ですよね?

 

しつこいようですが、この心遣いが大切なんですよ。

 

そして4行目。

Exit Sub

これは「処理を抜ける」という意味です。

 

テキストボックスにカーソルを合わせたので、これからはシステム使用者が手動で入力します。そのため処理はここで終わりにする必要があるということです。

 

5行目。

End If

これはif~then…ステートメントを終える時に(ほぼ)必ず付けます。文字通り「Ifステートメント終了する」という意味です。

 

これで完成です。

一般名、薬効、採用区分、単位はどうする?

さて同様に空欄だとマズイのはテキストボックスの一般名、薬効、コンボボックス採用区分、単位ですね。

 

ただし採用区分と単位は最初から候補を設けています。コンボボックスにワークシートから選択肢を取得するようにしましたね。

 

ここで注意が必要なのが、コンボボックスの選択肢を間違ってBackSpaceで削除されたり、別の言葉を入力されたりすること。

 

そうされないように一手間加えます。コンボボックスのプロパティウインドウを見て下さい。

 

vba2-13-6下の方にStyleってありますよね。標準では「0-fmStyleDropDownCombo」になっていますが、それを「2-fmStyleDropDownList」にしてください。

 

こうすることで、コンボボックスの中身の削除、入力ができなくなり、選択肢から選ぶことしかできなくなります。

 

これをcboTaniとcboKubun両方に行ってください。

 

識別記号については、錠剤に何も書かれていない薬もありますし、同成分薬、同効薬についても自分の病院に採用がある場合は入力しませんので、空欄でもOKとします。

 

ではテキストボックス一般名、薬効に同じようにコードを書いていきましょう。上の画像を参考にして下さい。

 

If txtDname.Text = “” Then
MsgBox “医薬品名を入力して下さい”, vbExclamation, “確認”
txtDname.SetFocus
Exit Sub
End If
If txtGname.Text = “” Then
MsgBox “一般名を入力して下さい”, vbExclamation, “確認”
txtGname.SetFocus
Exit Sub
End If
If txtEffect.Text = “” Then
MsgBox “薬効を入力して下さい”, vbExclamation, “確認”
txtEffect.SetFocus
Exit Sub
End If

一応コピペできるように記載しておきますが、可能な限り自分で入力するようにしてくださいね。

 

きちんと入力しながら講座を進める人と、コピペしかしない人では最終的にものすごい差がつきますから。

 

それでは今回はこれで終了です。お疲れ様でした。

 

次回は登録時に「本当に登録していいんですね?」と最終確認するコードを書いていきたいと思います。

>>Excel VBA講座 目次はこちら