ous">

小さな在庫管理

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

商品入庫画面のマスタデータ取得 [VBA在庫管理システムVer02#07]

前回、商品マスタ画面の動作設定をおこないました。ここから商品入庫画面のプログラムを作成していきます。

この記事では、商品入庫画面のマスタデータ取得のプログラムを作成していきます。


VBA在庫管理システムVer02

商品入庫のマスタデータ取得

VBA在庫管理システムVer01

Ver01では、エクセルブックの商品マスタデータを配列変数 aryItemMaster() に取り込むプロシージャをサブルーチンとして作成しました。

Sub GetItemMaster()

    Application.ScreenUpdating = False

'作業ブックを開く
Workbooks.Open データ位置 & "在庫管理DATA.xlsx"
    
'オブジェクト変数の取得
Dim wsItemMaster As Worksheet
Set wsItemMaster = Workbooks("在庫管理DATA.xlsx").Sheets("M_商品")

'最終行の取得
Dim wsItemMasterRow As Long
wsItemMasterRow = wsItemMaster.Cells(Rows.Count, 1).End(xlUp).Row

'商品名称を昇順で並べ替え
wsItemMaster.Range("A1").Sort key1:=wsItemMaster.Range("B1"), order1:=xlAscending, Header:=xlYes

'変数の設定
Dim i As Long, j As Long
ReDim aryItemMaster(wsItemMasterRow - 2, 9) As Variant
j = 0

'配列変数への書込み
For i = 2 To wsItemMasterRow
    If wsItemMaster.Cells(i, wsItemMasterColumns.M削除) = 0 Then
        aryItemMaster(j, 0) = wsItemMaster.Cells(i, wsItemMasterColumns.M商品ID)
        aryItemMaster(j, 1) = wsItemMaster.Cells(i, wsItemMasterColumns.M商品名称)
        aryItemMaster(j, 2) = wsItemMaster.Cells(i, wsItemMasterColumns.M登録日)
        aryItemMaster(j, 3) = wsItemMaster.Cells(i, wsItemMasterColumns.M更新日)
        aryItemMaster(j, 4) = wsItemMaster.Cells(i, wsItemMasterColumns.M発注先)
        aryItemMaster(j, 5) = wsItemMaster.Cells(i, wsItemMasterColumns.M発注単位)
        aryItemMaster(j, 6) = wsItemMaster.Cells(i, wsItemMasterColumns.M梱包数)
        aryItemMaster(j, 7) = wsItemMaster.Cells(i, wsItemMasterColumns.M最大在庫)
        aryItemMaster(j, 8) = wsItemMaster.Cells(i, wsItemMasterColumns.M発注点)
        aryItemMaster(j, 9) = wsItemMaster.Cells(i, wsItemMasterColumns.M棚位置)
        j = j + 1
    End If
Next

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

    Application.ScreenUpdating = True

End Sub

 

クエリの作成

マスタデータ取得用クエリは、商品マスタ画面で作成したQ_M商品を使用していきます。

Q_M商品は商品マスタ画面用の必要データのみで作成されているので、商品入庫画面用にはデータが不足しています。
そこで、クエリに必要なフィールド(棚卸日・棚卸数)を追加します。


 

データの取り込み

Ver02では、アクセスDBの商品マスタデータを配列変数 aryItemMaster() に取り込むので、プロシージャ:GetItemMasterを修正します。

Sub GetItemMaster()

'データベース接続
Call DB接続

'''''''''' レコード抽出 ''''''''''

'レコードセットオブジェクトの作成
Dim adoRs As Object
Set adoRs = CreateObject("ADODB.Recordset")

'SQL文の変数への取り込み
Dim strSQL As String
strSQL = "SELECT*FROM Q_M商品"

'レコードセットの取得
adoRs.Open strSQL, adoCn

'変数の設定
Dim i As Long
ReDim aryItemMaster(adoRs.RecordCount - 1, 11) As Variant
i = 0

'配列変数への書込み
Do Until adoRs.EOF
    aryItemMaster(i, 0) = adoRs!商品ID
    aryItemMaster(i, 1) = adoRs!商品名称
    aryItemMaster(i, 2) = adoRs!登録日
    aryItemMaster(i, 3) = adoRs!更新日
    aryItemMaster(i, 4) = adoRs!発注先
    aryItemMaster(i, 5) = adoRs!発注単位
    aryItemMaster(i, 6) = adoRs!梱包数
    aryItemMaster(i, 7) = adoRs!最大在庫
    aryItemMaster(i, 8) = adoRs!発注点
    aryItemMaster(i, 9) = adoRs!棚位置
    aryItemMaster(i, 10) = adoRs!棚卸日
    aryItemMaster(i, 11) = adoRs!棚卸数
    i = i + 1                    'カウンターを加算

    adoRs.MoveNext       'カーソルを1行下へ
Loop

'レコードセットオブジェクトの破棄
adoRs.Close
Set adoRs = Nothing

''''''''''''''''''''''''''''''''''''''''

'データベース切断
Call DB切断

End Sub

@1. 配列変数への書き込み
クエリに追加した棚卸情報も、変数に取り込みます。
 

データの格納

配列変数 aryItemMaster()の要素数を変更したので、UserForm_Initialize プロシージャのコードを修正します。

Private Sub UserForm_Initialize()

'----サイズ調整---------------------------------------------------------------
    Me.Zoom = Me.Zoom * ((画面高さ * 高さ割合) / Me.Height)
    Me.Width = Me.Width * ((画面高さ * 高さ割合) / Me.Height)
    Me.Height = Me.Height * ((画面高さ * 高さ割合) / Me.Height)
'-----------------------------------------------------------------------------

'商品マスタ情報の取得
Call GetItemMaster

'商品名称コンボボックスの設定
With cmbItemName
    .ColumnCount = 12                           ←ここを修正
    .ColumnWidths = "0;200;0;0;0;0;0;0;0;0;0;0" ←ここを修正

    .List = aryItemMaster()
End With

'商品IDコンボボックスの設定
Dim i As Long

For i = 0 To cmbItemName.ListCount - 1
    cmbItemID.AddItem cmbItemName.List(i, 0)
Next

'入庫内訳コンボボックスの設定
With cmbInputDetail
    .AddItem "通常入庫"
    .AddItem "返品入庫"
    .AddItem "在庫調整"
End With

'修正用入庫内訳コンボボックスの設定
With cmbCorrectInputDetail
    .AddItem "通常入庫"
    .AddItem "返品入庫"
    .AddItem "在庫調整"
End With

'入庫リストの表示
Call ShowInputAllScheduleList

End Sub

@1. 商品名称コンボボックスの設定
配列変数 aryItemMaster()の要素数を変更したので、商品名称コンボボックスの.ColumnCountと.ColumnWidthsを修正します。

@2. 入庫リストの表示
修正前なので、コメントアウトしておくと、入庫画面が表示可能となります。

 

次回は商品入庫画面の入庫リスト部分を作成します。
www.minizaiko.com