医薬品新規登録画面もついに最後の講座となりました。
今回は医薬品の新規登録を行った後、続けて別の医薬品を入力する場合の対応です。
具体的には「テキストボックスを空欄にし、コンボボックスを初期化(初期値を入れる)する」というコードを書いていきます。
それではいきましょう。
スポンサーリンク
For Each~Next…ステートメントとは?
テキストボックスを空欄にする方法で一番簡単なのは…
txtDname=””
txtGname=””
みたいな感じで一つ一つ書いていくという方法です。これでも全然問題ありません。
ただ今回はコントロールもそんなに多くないのでこれでもいいのですが、たくさん配置した場合はちょっと大変です。コードの見た目も悪いですしね。
そこで、「ユーザーフォームに配置されている全てのテキストボックスを空欄にし、コンボボックスに初期値を入れる」というコードを「For Each~Next…」ステートメントを使用して書いていきたいと思います。
Dim ctrl As Control
For Each ctrl In Controls
If TypeName(ctrl) = “TextBox” Then
ctrl.Text = “”
End If
Next ctrl
cboTani.Value = cboTani.List(0)
cboKubun.Value = cboKubun.List(0)
これが今回追加するコードになります。それでは順に解説していきましょう。
「変数ctrlをControlと宣言する」。Controlはテキストボックスやコンボボックスなどを意味します。
これが今回の最重要ポイント。繰り返しの動作を行う時に使用するステートメントです。
定型文として以下のように覚えてしまってもOKです。
For Each ctrl In Controls
If TypeName(ctrl) = “コントロール” Then
ctrl.Text = “”
End If
Next ctrl
「変数ctrlが”コントロール(textboxやcombobox等を指定)”の場合、そのコントロールを空欄にする。」
空欄にするという部分を別の動作にもできます。複数のコントロールをまとめて動作したい時にはとても便利です。
今回の場合は
For Each ctrl In Controls
If TypeName(ctrl) = “TextBox” Then
ctrl.Text = “”
End If
Next ctrl
「変数ctrlについて以下の繰り返し動作を行う。もし変数ctrlのタイプがテキストボックスであれば、そのテキストボックスを空欄にする。そして次のコントロールに進む(全てのコントロールを処理するまで)」となります。
つまり、ユーザーフォーム上に配置されたテキストボックスを順番に空欄にしていき、全部のテキストボックスが空欄になった段階で動作を終了する、という意味になります。
続けていきます。
cboTani.Value = cboTani.List(0)
cboKubun.Value = cboKubun.List(0)
これはもう簡単ですね。
「コンボボックス単位にコンボボックスのリストの一番上の値を入れる」
「コンボボックス区分にコンボボックスのリストの一番上の値を入れる」
覚えていますか?VBAにおいて、1番上は1ではなく0でしたね。
テキストボックスは空欄に、コンボボックスについてはデフォルトの値を入れましょう。単位はT、区分は○ですね。
空欄にしてしまうとTや○でも選ぶ必要が出てきますので、入力者のためにきちんと設定してあげます。
それでは最後に1つコードを書きます。
スポンサーリンク
メニュー画面と医薬品新規登録画面をリンクさせる
メニュー画面のユーザーフォームを開いて、新規登録ボタンをダブルクリックします。
Private Sub btnRegister_Click()の下に
と書いて下さい。
showは「表示する」という意味。つまり「frmDRegisterを表示する」ということになります。
最初のメニュー画面で新規登録ボタンを押すと、医薬品新規登録画面が立ち上がるという動作になります。
ちなみにメニュー画面は消えたわけではなく、その上に新規登録画面が表示される形となります。
それではF5を押してメニュー画面を起動した後、新規登録ボタンを押してみて下さい。そして新規登録画面が表示されるのを確認して下さい。
お疲れ様でした!
医薬品引用ボタンのコードは別の講座で解説しますので、今回はここまでとします。
新規登録画面はこれで一旦完成。次回の第3章からは医薬品検索画面を作成していきます。