ous">

小さな在庫管理

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

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

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

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


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商品を使用していきます。

 

データの取り込み

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 cmbOutputDetail
    .AddItem "通常出庫"
    .AddItem "NG出庫"
    .AddItem "在庫調整"
End With

'修正用出庫内訳コンボボックスの設定
With cmbCorrectOutputDetail
    .AddItem "通常出庫"
    .AddItem "NG出庫"
    .AddItem "在庫調整"
End With

'出庫予定リストの表示
Call ShowOutputAllScheduleList

End Sub

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

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

 

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