ous">

小さな在庫管理

在庫管理導入からシステム作成まで詳細解説!

商品出庫画面の修正/削除作成 [VBA在庫管理システムVer01#21]

前回、商品出庫画面の出庫リストの表示動作を作成しました。

この記事では、商品出庫画面の修正/削除機能を作成していきます。


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