前回、商品出庫画面の出庫リストの表示動作を作成しました。
この記事では、商品出庫画面の修正/削除機能を作成していきます。
VBA在庫管理システムVer01
商品出庫の選択/リセットボタン作成
変数の設定
商品出庫データの操作用変数の設定をします。
VBEでfrmItenOutputを選択し、宣言セクションにデータ操作用の変数をPrivateで宣言します。
Option Explicit 'データ操作用変数 Private InOutID As Long
@1. データ操作用変数
入出庫履歴を一意に確定させるために、入出庫IDを格納する変数です。
出庫リストの選択
出庫リストの選択ボタンの動作を作成します。
出庫リストのリスト項目を選択し、選択ボタンをクリックすると、出庫リスト下部に配置したテキストボックス(修正ボックス)に出庫情報を表示する動作を作成します。
Private Sub btnListSelect_Click() '異常値の回避 If lstOutput.ListIndex = -1 Then Exit Sub End If '修正ボックスへの表示 With lstOutput InOutID = .List(.ListIndex, 0) texCorrectOutputDay.Value = .List(.ListIndex, 1) texCorrectItemID.Value = .List(.ListIndex, 2) texCorrectItemName.Value = .List(.ListIndex, 3) texCorrectOutputQuantity.Value = .List(.ListIndex, 4) cmbCorrectOutputDetail.Text = .List(.ListIndex, 5) End With '商品情報の表示 cmbItemName.Text = lstOutput.List(lstOutput.ListIndex, 3) 'リスト再選択 Dim i As Long For i = 0 To lstOutput.ListCount - 1 If lstOutput.List(i, 0) = InOutID Then lstOutput.ListIndex = i Exit For End If Next End Sub
@1. 異常値の回避
出庫リストの選択がないときは、処理を実行しません。
@2. 修正ボックスへの表示
リスト項目を各テキストボックスへ表示させます。入出庫IDは変数= InOutIDに格納します。
@3. 商品情報の表示
リスト項目の商品名称を商品名称コンボボックスに渡します。
cmbItemName_ Cangeプロシージャで、商品情報が表示され、出庫リストは商品別リストに変わります。
@4. リスト再選択
入出庫IDをキーに、修正ボックスに表示されているデータを選択します。
出庫リストの選択解除
出庫リストのリセットボタンの動作を作成します。
Private Sub btnListRiset_Click() '修正ボックスの表示解除 InOutID = 0 texCorrectOutputDay.Value = "" texCorrectItemID.Value = "" texCorrectItemName.Value = "" texCorrectOutputQuantity.Value = "" cmbCorrectOutputDetail.Text = "" End Sub
@1. 変数の初期化
変数= InOutIDに0を入れ、初期化します。
リセットプロシージャにも、追加します。
Sub Reset() '詳細情報の表示解除 cmbItemID.Value = "" texSupplier.Value = "" texOrderUnit.Value = "" texPackage.Value = "" texMaxStock.Value = "" texOrderPoint.Value = "" texStockPosition.Value = "" '出庫入力の表示解除 texOutputDay.Value = "" texOutputQuantity.Value = "" cmbOutputDetail.Text = "" '修正ボックスの表示解除 ←ここを追加 Call btnListRiset_Click '出庫予定リストの表示 Call ShowOutputAllScheduleList End Sub
商品出庫の修正ボタン作成
修正
出庫情報を修正するプロシージャをサブルーチンとして作成します。
修正項目は、入出庫日・入出庫数・入出庫内訳の3項目です。商品名称を変更する場合は、一旦削除し再登録します。
Sub 修正() '異常値の回避 If InOutID = 0 Then MsgBox "商品選択がありません。", vbExclamation, "確認" Exit Sub End If Application.ScreenUpdating = False '作業ブックを開く Workbooks.Open データ位置 & "在庫管理DATA.xlsx" 'オブジェクト変数の取得 Dim wsInOut As Worksheet Set wsInOut = Workbooks("在庫管理DATA.xlsx").Sheets("T_入出庫") '修正行の取得 Dim 修正行 As Long 修正行 = wsInOut.Columns("A:A").Find(InOutID, lookat:=xlWhole).Row '修正情報書き込み With wsInOut .Cells(修正行, wsInOutColumns.T入出庫日) = Format(texCorrectOutputDay.Value, "yyyy/mm/dd") .Cells(修正行, wsInOutColumns.T入出庫数) = texCorrectOutputQuantity.Value .Cells(修正行, wsInOutColumns.T入出庫内訳) = cmbCorrectOutputDetail.Text End With '作業ブックを閉じる Workbooks("在庫管理DATA.xlsx").Close savechanges:=True Application.ScreenUpdating = True '商品別リストの表示 Call ShowOutputItemScheduleList 'リスト再選択 Dim i As Long For i = 0 To lstOutput.ListCount - 1 If lstOutput.List(i, 0) = InOutID Then lstOutput.ListIndex = i Exit For End If Next '修正ボックスの表示解除 Call btnListRiset_Click End Sub
@1. 異常値の回避
入出庫IDがないものは、修正元データがありませんので、コメントを表示して処理を終了させます。
@2. 修正行の取得
シートが並び変わっているおそれがあるので、Find関数を使用し、入出庫IDをキーに修正行を検索します。
@3. 修正情報書き込み
修正行に修正可能なデータのみ、書き込んでいきます。
@4. ブックの立ち下げ
シートに修正情報を書き込みましたので、ブックは保存して閉じます。
@5. 出庫リストの再表示
商品別リストを再表示したあと、入出庫IDをキーに、修正ボックスに表示されているデータを選択します。
修正ボックスはリセットします。
修正ボタンの設定
修正ボタンクリック時の動作を作成します。サブルーチンを実行させます。
Private Sub btnUpdate_Click() Call 修正 End Sub
商品出庫の削除ボタン作成
削除
出庫情報を削除するプロシージャをサブルーチンとして作成します。
データは論理削除の構造なので、削除フラグを変更します。
Sub 削除() '異常値の回避 If InOutID = 0 Then MsgBox "商品選択がありません。", vbExclamation, "確認" Exit Sub End If Application.ScreenUpdating = False '作業ブックを開く Workbooks.Open データ位置 & "在庫管理DATA.xlsx" 'オブジェクト変数の取得 Dim wsInOut As Worksheet Set wsInOut = Workbooks("在庫管理DATA.xlsx").Sheets("T_入出庫") '削除行の取得 Dim 削除行 As Long 削除行 = wsInOut.Columns("A:A").Find(InOutID, lookat:=xlWhole).Row '削除情報書き込み With wsInOut .Cells(削除行, wsInOutColumns.T削除) = 1 End With '作業ブックを閉じる Workbooks("在庫管理DATA.xlsx").Close savechanges:=True Application.ScreenUpdating = True '商品別リストの表示 Call ShowOutputItemScheduleList '修正ボックスの表示解除 Call btnListRiset_Click End Sub
@1. 異常値の回避
入出庫IDがないものは、削除元データがありませんので、コメントを表示して処理を終了させます。
@2. 削除行の取得
シートが並び変わっているおそれがあるので、Find関数を使用し、入出庫IDをキーに削除行を検索します。
@3. 削除情報書き込み
マスタデータは論理削除の構造なので、削除フラグに1を書き込み、行削除のような物理削除はしません。
@4. ブックの立ち下げ
シートに削除情報を書き込みましたので、ブックは保存して閉じます。
@5. 出庫リストの再表示
商品別リストを再表示したあと、修正ボックスをリセットします。
削除ボタンの設定
削除ボタンクリック時の動作を作成します。サブルーチンを実行させます。
Private Sub btnDelete_Click() Call 削除 End Sub
商品出庫画面の修正/削除ボタンの動作設定ができました。
次回は商品出庫画面の入力支援を作成し、完成させます。
www.minizaiko.com