今回は登録ボタンを押すと、frmDSearchで選択した医薬品情報をワークシートに転記するコードを書いていきます。それではいきましょう。
スポンサーリンク
ユーザーフォーム上のテキストボックスの値をワークシートに転記
上の画像を見て下さい。この状態で登録ボタンを押すと、印刷シートの医薬品No1の部分に入力した情報が転記されるというコードを書きましょう。
ここで注意することは、どのタブが選択されているかです。Tab1(No1)なら印刷シートのNo1の場所に転記され、Tab2(No2)ならNo2の場所に転記されなければなりません。
ちなみにどのタブストリップを選択しているかについてはタブストリップ自身が情報を持っています。タブの1個目は0、2個目は1…10個目は9となります。
コンボボックスでもお話しましたが、VBAでは先頭を0とするのでしたね。タブストリップも同様です。
登録ボタンをダブルクリック。または右クリックからコードの表示。
タブNo1が選択されている時のコードを書いてみました。テキストボックスに入っている値を該当するセルに転記するというものです。
ただですね…これをTabStrip.Value = 1の場合、2の場合なんてやってられませんよね。ここも楽な方法を考えましょう。
書き方は色々ありますが、わかりやすさとある程度コードを短くする事を考慮して次のような方法でいきましょうか。
もう一度上の画像を見て下さい。セルの行番号に注目です。まず7、8、9、10、11と5つの数字がある事、そしてそれらの差は1である事に注目。
また、これは医薬品No1の情報が転記される場所であり、No2ならば6個下の行、No3ならば12個下の行になります。これは鑑別報告書の初期化でもやりましたね。そしてなるべく同じようなコードは書きたくない。
スポンサーリンク
変数を使ってこのようにまとめてみました。みなさん理解できますでしょうか?1つずつ解説していきましょう。
「変数i、j、k、l、m、nを数字と宣言する」
「変数iにタブストリップの値を入れる。」タブ1が選択されていれば変数iは0、タブ2なら1となります。
j = 7
End If
「もし変数iが0ならば(No1のタブが選択されていれば)変数jに7を入れる。」なぜ7を入れるかは下を見て下さい。
l = k + 1
m = l + 1
n = m + 1
項目毎に列は決まっています。違うのは行番号だけですね。先ほど7~11の数字に注目と言いました。
だから7が決まれば後は1を足していくだけですよね。つまりjが7ならkは8、kが8ならlは9、lが9ならmは10、mが10ならnは11と自動的に決まります。
j=7、k=8、l=9、m=10、n=11を入れると…最初に書いたコードと同じになっているのを確認して下さい。
行を変数にすることで、コードを使いまわす事ができます。あとはちょっと工夫してあげればOKです。
If~Then…ElseIf ステートメント
医薬品No1を選択している時は下記のように書きましたね。
j = 7
End If
医薬品No2の転記する場所はその6個下にある。つまり…
j = 13
End If
と書くことができます。
ですがこれをi=2の場合~i=9の場合まで書くのはちょっとカッコ悪いです。そこで以下のように書きます。
If~thenステートメントについては何回も使用していますが、今回は複数の条件と処理を一つにまとめて書いています。
処理1
End If
If 条件2 then
処理2
End If
これをまとめると…
処理1
ElseIf 条件2 then
処理2
End If
こうなります。
これで選択されたタブの該当するセルに医薬品情報が転記されるようになります。実際に起動し各タブに医薬品を検索して登録した後、一度システムを終了して印刷シートを見て下さい。きちんと医薬品が登録されましたね。
それでは今回は以上で終了となります。お疲れ様でした。次回はシートに転記した医薬品情報を削除するコードについてお話します。