前回、商品マスタデータの取得プログラムを作成しました。
この記事では、商品入庫画面の商品検索・入庫入力を作成していきます。
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