前回、商品在庫画面の在庫更新のクエリを作成しました。ここから商品在庫画面のプログラムを作成していきます。
この記事では、商品在庫画面のマスタデータ取得のプログラムを作成していきます。
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