空白入力への対応(その2)
なるほど通し番号を付加するようにすれば、空白レコードが入っても大丈夫なのか、というところ
が前回のポイントでした。
ですが「ぬわにぃぃぃ?空白レコードなんぞ登録は認めんっ」という方も中にはいらっしゃるはず。
というわけで今回は「空白入力を許可しない」という視点で攻めてみたいと思います。
例えば皆さんでしたら、この目的を達成するためにどのような手法を取られるでしょうか。
実はこれも、方法は一つでは無いです。例えば、
(1)警告メッセージを表示し、入力を促す
一番スタンダードな手法ですね。
ユーザーとしても、何が間違っているのかがすぐに把握でき、対応がしやすいというメリットがあ
ります(^^)
(2)特定のコントロールを使用不可にし、操作自体を制限してしまう
いわゆる無言の抗議ってやつですね(^^;) #なのか?
例えば今回の場合でいくと、テキストボックスに何か文字が入るまで「登録」を押せなくしてしま
うとかいうことです。
まぁこれは使い方をわかっている人にとっては、なんで「登録」が使用不可なのかが一目瞭然です
けれども、よくわからずに使っている人にとっては「故障かしら?」などと思ってしまったりもす
るかもしれません。
#よくわからない人に使わせるな、というツッコミはなしね(^_^;)
ということを踏まえまして、まずは(1)の方法から見ていくことにいたしましょう。
ユーザーが空白を入れちゃいそうな場合に警告を表示するってやり方も、この場合ですと2通り考
えられますよね。
1つは"テキストボックスに空白入力された瞬間"、もう1つは「登録」が押された時ですね。
最初の方法は、各テキストボックスの入力状況をチェックし、リアルタイムで入力修正を促すやり
方です。間違っていたらその場で直してしまいたい、という性格の方向けです。
後の方法は、「登録」が押されたタイミングで、チェック対象となる全てのテキストボックスを調
べて、そこでエラーとなるものだけ順番に警告表示しよう、というやり方です。
"順番に"と敢えて申し上げているのは、例えば10個所入力するところがあって、そのうち9個所
が間違っていたとします。その時に「登録」を押された瞬間、9回も連続して警告メッセージが表
示されても困りますよね(^_^;)
#どれがエラーだったかなんて覚えきれませんし、何よりうっとぉしい。
ですのでエラーが複数個所あったとしても、「登録」を押された時に出てくる警告は1回。
その個所を直して再び「登録」が押されたら、また次のエラー個所について警告表示・・・という
ような感じです。お分かりいただけましたでしょうか?(^-^;
これら2つの方法はセットで使われるケースが多いです。要は入力時のエラーチェックを厳重にし
ておけば、おかしなデータが入りこむことによって集計がヘンになったり・・・とかいうことを防
げるわけですからヽ(^-^ )
で、まずは「登録」ボタンでの空白チェックから。
「氏名」テキストボックスが空白だった場合を考えてみましょうか。
テキストボックスに入っている文字列を取得するには Text プロパティの値を見ればいいというの
は前にもやりましたよね d(^-^ )
"Textプロパティの値が空白だったら"という条件になりますから
If TxtName.Text = "" Then ・・・
という書き方でよさそうですよね。
・・・でもですね、これだとまだ出来としては半分なんですよ。
なんでかって言うと、まず試しにこれ↓を CmdAddNew_Click の中、"自動採番処理"の前に追加して
みて下さい。
If TxtName.Text = "" Then
MsgBox ("こら")
End If
でもって「氏名」のテキストボックスのとこでスペースキーを1回押してから、「登録」をクリッ
クしてみましょう。
・・・どうですか? 怒られないですよね。
スペースキーを押すってことは"空白の文字列を入れる"ってことになるんです。"空白の文字列"と
か言うとややこしい気もしますが、スペース(空白)も文字数としてはカウントされるんだというこ
とは覚えておいて下さい。【重要】
じゃあそういう場合はどうするのかということですよね。
大丈夫。そういうときは「Trim関数」を使いましょう。
Trim関数とは、"指定された文字列の両側にある、余分な空白文字列を取り除いてくれる関数"なの
です。
例えば
Dim Test As String
Test = " aa "
とかいう値を持つ変数があったとします。aaの両側には空白が入っていますよね。
こんな時に
Dim Test As String
Dim Test2 As String
Test = " aa "
Test2 = Trim(Test)
としてやると、変数Test2には変数Testから空白を取り除いた aa が格納されますヽ(^-^ )
ちなみに RTrim と書くと、指定文字列の右側に存在する空白のみ、LTrimと書くと左側に存在する
空白のみ取り除きます。RとLは RightとLeftって意味です。
というわけで、この関数を使って
If Trim(TxtName.Text) = "" Then
MsgBox ("こら")
End If
としてやれば、「氏名」テキストボックスにスペース(空白)のみ入力された場合でも、それを
取り除いてくれますから、結果は "" とイコールになります。
それでは次回までごきげんよぉ~(^^)/~
|
|
TOP > VBAでラクしたい ~Part 2~
|