コードを再利用、つまりコピー・アンド・ペーストをして医薬品情報修正・削除画面を作っていきましょう。

 

医薬品検索画面と医薬品情報修正・削除画面の2つは画面構成はほぼ同じで、かつその動作もほぼ同じです。

 

つまりコードを新たに書かなくても、そのまんまコピーしてあげればほとんどそのまま使えるというわけですね。

 

これを使わない手はありません。それでは早速いきましょう。

スポンサーリンク

コードのコピーアンドペーストで楽チン

 

vba4-2-1まずfrmDSearchのコード画面を開きます。「右クリック → コードの表示」をクリック。

 

そしてコード画面の適当な場所をクリックして、ctrlを押しながらAを押して下さい。全てのコードが選択されましたね。これをコピーします。

 

vba4-2-3そしてfrmDCorrectのコード画面を開きます。まだ何もコードが書かれていないかと思います。

 

vba4-2-4ここに先ほどコピーしたコードを貼り付けましょう。これで医薬品の検索とフォームを閉じるコードは完成です。

 

医薬品情報修正・削除画面ではこれに加え

  • 検索した後に医薬品情報を修正し、更新ボタンを押すとその内容が反映されるコード
  • 削除ボタンを押すと医薬品情報を削除するコード

を書いていきます。

 

今回は医薬品情報を修正するわけですから、コンボボックスに値を読み込ませる事が必要となります。

 

vba4-2-5frmDRegisterのコード画面を開きます。

 

vba4-2-6このコードをコピーして、frmDCorrectに貼り付けて下さい。

 

あとは更新ボタンと削除ボタンを押した時の動作を書けば、医薬品情報修正・削除画面は完成です。

 

先に削除ボタンの処理を書いていきましょう。

 

vba4-2-7まずは削除ボタンをダブルクリック。又は「右クリック → コードの表示」

 

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

 

まず書くべきコードは「本当に削除していいか」を確認するコードです。間違って押してしまうと取り返しがつかなくなる、という事もありますからね。

 

では医薬品新規登録画面frmDRegisterのコードを開いて下さい。そして上の画像で赤で囲んだ部分に注目。これ使えそうですよね。早速コピーして…

 

vba4-2-10削除ボタンのコードに貼り付けます。ただこのままだとダメなので一部訂正しましょう。

 

vba4-2-12上の画像の赤枠で囲んだ部分を修正します。

「医薬品データを登録します」 → 「医薬品データを削除します」

「医薬品新規登録の確認」 → 「医薬品データ削除の確認」

「vbQuestion」 → 「vbCritical

今回は「間違って削除したら危険!」という事で、注意喚起を強調するために”vbCritical”にしています。

 

vba4-2-13

With Worksheets(“医薬品マスタ”)

Dim TargetRow As Integer, Kensaku As String

Kensaku = txtDname.Text

.Range(“A2”).AutoFilter field:=1, Criteria1:=Kensaku

TargetRow = .Range(“A65536”).End(xlUp).Row

.Rows(TargetRow).Delete Shift:=xlUp

.AutoFilterMode = False

lstKouho.Clear

txDSearch.SetFocus

End With

続けて新しいコードを書きます。赤枠の部分です。ここだけは他のユーザーフォームからコピペできません。頑張っていきましょう。

 

流れとしては…「削除したい医薬品名でワークシート医薬品マスタにフィルターをかけ抽出し、該当する行を削除する」という形となります。

スポンサーリンク

行を削除して上にシフトする「shift:=xlup」

それでは順に解説していきましょう。※With構文は省略。

 

Dim TargetRow As Integer, Kensaku As String

「変数TargetRowを整数、変数Kensakuを文字列と宣言する」

 

Kensaku = txtDname.text

「変数KensakuにはtxtDnameに入っている値を入れる」

 

.Range(“A1”).AutoFilter field:=1, Criteria1:=Kensaku

「ワークシート医薬品マスタで、変数Kensaku(txtDnameの値)でA列にフィルターをかける。」

 

ここでは完全一致する医薬品だけが抽出されます。

 

TargetRow = .Range(“A65536”).End(xlUp).Row

「変数TargetRowはワークシート医薬品マスタのA65536のセルから上に向かってぶつかった行である」

 

.Rows(TargetRow).Delete shift:=xlup

「その行を削除する。そして上に詰める。」これが今回初めて見るコードですね。

 

削除した後は上にシフトし(詰め)なければいけません。空白の行ができてしまいますからね。

 

ちなみに今回は変数ですが、例えば

Rows(1).Delete

ならば「1行目を削除する」となります。

 

.AutoFilterMode = False

「フィルターを解除する。」

 

lstKouho.Clear

「リストボックスlstKouhoをクリアする。」

 

txDSearch.SetFocus

「txDSearchにカーソルをあわせる。」

 

ほとんど今までの復習ですね。最後にもう一仕事します。

 

全てのテキストボックスを空欄にして、コンボボックスには初期値を入れるようにします。医薬品新規登録画面で行った処理ですね。

 

vba4-2-14医薬品新規登録画面のこの部分をコピーして、先ほどのコードの下に貼り付けて下さい。

 

こんな感じですね。長くなってしまいましたので、今回はこの辺にしておきましょう。お疲れ様でした。

 

次回は更新ボタンを押した時のコードを書いていきます。

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