ous">

小さな在庫管理

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

商品入庫画面の入庫入力作成 [VBA在庫管理システムVer01#12]

前回、商品マスタデータの取得プログラムを作成しました。

この記事では、商品入庫画面の商品検索・入庫入力を作成していきます。


VBA在庫管理システムVer01

商品入庫の商品検索作成

変数の設定

宣言セクションにデータ展開用の列挙型変数を追加します。変数はPrivateで宣言します。

'lstItemMasterの項目列設定
Private Enum lstItemMasterColumns
    L商品ID = 0
    L商品名称
    L登録日
    L更新日
    L発注先
    L発注単位
    L梱包数
    L最大在庫
    L発注点
    L棚位置
End Enum

@1. 列挙型変数の宣言
商品マスタコンボボックスのデータ展開用に、あらたに宣言セクションで列挙型変数を定義します。
シートの項目列と異なり、初期定数は0から始まります。
 

詳細情報のリセット設定

詳細データをリセットするプロシージャをサブルーチンとして作成します。

Sub Reset()

'詳細情報の表示解除
cmbItemID.Text = ""
texSupplier.Value = ""
texOrderUnit.Value = ""
texPackage.Value = ""
texMaxStock.Value = ""
texOrderPoint.Value = ""
texStockPosition.Value = ""

'入庫入力の表示解除
texInputDay.Value = ""
texInputQuantity.Value = ""
cmbInputDetail.Text = ""

End Sub

@1. 詳細情報の削除
各表示を削除します。

@2. 入庫入力の解除
各表示を削除します。
 

商品名称コンボでの名称検索

商品名称コンボボックスの動作設定を作成します。

Private Sub cmbItemName_Change()

'商品選択無し時の回避
If cmbItemName.ListIndex = -1 Then
    Call Reset
    Exit Sub
End If

'詳細情報/入庫入力の表示
With cmbItemName
    cmbItemID.ListIndex = .ListIndex
    texSupplier.Value = .List(.ListIndex, lstItemMasterColumns.L発注先)
    texOrderUnit.Value = .List(.ListIndex, lstItemMasterColumns.L発注単位)
    texPackage.Value = .List(.ListIndex, lstItemMasterColumns.L梱包数)
    texMaxStock.Value = .List(.ListIndex, lstItemMasterColumns.L最大在庫)
    texOrderPoint.Value = .List(.ListIndex, lstItemMasterColumns.L発注点)
    texStockPosition.Value = .List(.ListIndex, lstItemMasterColumns.L棚位置)

    texInputDay.Value = Format(Date, "yyyy/mm/dd")
    texInputQuantity.Value = .List(.ListIndex, lstItemMasterColumns.L発注単位)
    cmbInputDetail.Text = "通常入庫"
End With

End Sub

@1. 異常値の回避
商品名称コンボの入力内容が商品名称コンボのリスト項目と合致しないときは、詳細情報と入力情報をリセットします。
Resetプロシージャを呼び出し、詳細データをクリアした後、プロシージャを抜けます。

@2. 詳細情報/入庫入力の表示
商品名称コンボの入力内容が商品名称コンボのリスト項目と合致したときは、商品名称コンボの各リスト項目をテキストボックスに表示させます。
また、入庫入力の初期設定を追加しています。入庫日は当日、入庫数は発注単位、入庫内訳は通常入庫を初期値として表示させます。
 

商品IDコンボでの商品検索

商品IDコンボボックスの動作設定を作成します。

Private Sub cmbItemID_Change()

'商品名称の選択
cmbItemName.ListIndex = cmbItemID.ListIndex

End Sub

@1. 商品名称コンボの選択
商品IDコンボボックスのインデックス番号を、商品名称コンボボックスに受け渡し、詳細表示等は cmbItemName_Change プロシージャーで実行させます。
 

リセットボタンの設定

リセットボタンの動作設定を作成します。

Private Sub btnReset_Click()

'商品名称の選択
cmbItemName.ListIndex = -1

End Sub

@1. 商品名称コンボの選択
インデックス番号 = -1 を、商品名称コンボボックスに受け渡し、詳細j情報のクリア等は cmbItemName_Change プロシージャーで実行させます。
 

商品入庫の入庫入力ボタン作成

変数の設定

宣言セクションにデータ書き込み用の列挙型変数を追加します。変数はPrivateで宣言します。

'wsInOutの項目列設定
Private Enum wsInOutColumns
    T入出庫ID = 1
    T入出庫日
    T商品ID
    T商品名称
    T入出庫数
    T入出庫内訳
    T入出庫区分
    T削除
End Enum

@1. 列挙型変数の宣言
入庫入力のデータ書き込み用に、あらたに宣言セクションで列挙型変数を定義します。
これは、入出庫シートの列数をあらわしたものです。
 

スピンボタンの設定

入庫日の日付変更用スピンボタンの動作設定をします。

スピンアップ・スピンダウンの各プロシージャを作成します。

Private Sub spnInputDay_SpinUp()
Dim dtDate As Date

If texInputDay.Value <> "" Then
    dtDate = texInputDay.Value
    texInputDay.Value = DateAdd("d", 1, dtDate)
End If

End Sub
Private Sub spnInputDay_SpinDown()
Dim dtDate As Date

If texInputDay.Value <> "" Then
    dtDate = texInputDay.Value
    texInputDay.Value = DateAdd("d", -1, dtDate)
End If

End Sub

@1. If条件設定
入庫日テキストボックスに日付が表示されていないときは、処理を実行しません。
商品の選択時には日付が表示されるので、処理を実行します。
 

登録

商品情報を登録するプロシージャをサブルーチンとして作成します。

Sub 登録()

'異常値の回避
If cmbItemName.Text = "" Or texInputDay.Value = "" Or texInputQuantity.Value  = "" Or cmbInputDetail.Text = "" 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 wsInOutRow As Long
wsInOutRow = wsInOut.Cells(Rows.Count, 1).End(xlUp).Row

'登録情報書き込み
With wsInOut
    .Cells(wsInOutRow + 1, wsInOutColumns.T入出庫ID) = wsInOutRow
    .Cells(wsInOutRow + 1, wsInOutColumns.T入出庫日) = Format(texInputDay.Value, "yyyy/mm/dd")
    .Cells(wsInOutRow + 1, wsInOutColumns.T商品ID) = cmbItemID.Text
    .Cells(wsInOutRow + 1, wsInOutColumns.T商品名称) = cmbItemName.Text
    .Cells(wsInOutRow + 1, wsInOutColumns.T入出庫数) = texInputQuantity.Value
    .Cells(wsInOutRow + 1, wsInOutColumns.T入出庫内訳) = cmbInputDetail.Text
    .Cells(wsInOutRow + 1, wsInOutColumns.T入出庫区分) = "入庫"
    .Cells(wsInOutRow + 1, wsInOutColumns.T削除) = 0
End With

'作業ブックを閉じる
Workbooks("在庫管理DATA.xlsx").Close savechanges:=True

        Application.ScreenUpdating = True

End Sub

@1. 異常値の回避
入力データが不足している場合、コメントを表示して処理を終了させます。

@2. 登録情報書き込み
シート最終行の次の行にデータを書き込んでいきます。
入出庫データは論理削除の構造なので、入出庫IDはシート最終行と同じ値となります。
入出庫区分に 入庫、削除フラグに0を登録するのも、忘れないでください。

@3. ブックの立ち下げ
シートに登録情報を書き込みましたので、ブックは保存して閉じます。
 

入庫入力ボタンの設定

入庫入力ボタンクリック時の動作を作成します。サブルーチンを実行させます。

Private Sub btnInput_Click()

Call 登録

End Sub

 

商品入庫画面の検索設定・入庫入力ができました。
次回は入庫リストの表示および動作を作成していきます。
www.minizaiko.com