ous">

小さな在庫管理

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

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

前回、商品在庫画面の在庫更新のクエリを作成しました。ここから商品在庫画面のプログラムを作成していきます。

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


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. 配列変数への書き込み
クエリに追加した棚卸情報も、変数に取り込みます。
 

データの格納

商品マスタデータは、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

'在庫表の表示
Call ShowItemStock

End Sub

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

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

 

次回は商品在庫画面の商品在庫表の表示部分を作成します。
www.minizaiko.com