ous">

小さな在庫管理

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

商品入庫画面の帳票出力作成 [VBA在庫管理システムVer01#15]

前回、商品入庫画面の修正/削除機能を作成しました。

この記事では、受入検査表を例に帳票の出力方法を解説します。


VBA在庫管理システムVer01

帳票出力の準備

出力帳票の作成

最初に準備したレポートブック(在庫管理REPORT.xlsx)に受入検査表用のシートを作成します。

帳票はヘッダー部のみ作成します。標題はVBAで書き込みますが、サンプルとして入力しています。

書式は、左から入庫情報・入庫履歴・受入検査表の順に作成します。入庫情報部分にはデータを取り込み、入庫履歴・受入検査表部分は記入用です。

なお、レポートブックの設置位置はデータブックと同一位置、デスクトップに置いた在庫管理フォルダとします。
 

出力ボタンの作成

商品入庫画面に受入検査表ボタンを追加します。

ツールボックスでコマンドボタンを選択し、フッター部でドラッグして、コントロールを追加します。

プロパティウィンドウで詳細設定します。

ボタンの設定


※プロパティ設定後のユーザーフォーム

 

出力フォームの作成

帳票出力完了後の終了フラグ用に、新たにユーザーフォームを作成します。

VBEを開き、[挿入] ‐ [ユーザーフォーム] を選択します。

プロジェクトエクスプローラーに [フォーム] ‐ [UserForm1] が追加され、コードウィンドウにユーザーフォームが表示されます。

プロパティウィンドウで詳細設定します。

フォームの設定


※プロパティ設定後のユーザーフォーム


ラベルを利用してヘッダー・フッターを作成し、ヘッダー部には”受入検査記録表を作成しました。”のコメントを追加します。


※プロパティ設定後のユーザーフォーム


受入検査表画面に閉じるボタンを追加します。

ツールボックスでコマンドボタンを選択し、フォーム上でドラッグして、コントロールを追加します。

プロパティウィンドウで詳細設定します。

ボタンの設定


※プロパティ設定後のユーザーフォーム


※VBA実行時の出力画面


閉じるボタンクリック時の動作設定をします。

Private Sub btnClose_Click()

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

'フォームを閉じる
Unload Me

End Sub

@1. 閉じるボタン
受入検査表を保存して閉じたあと、フォームを閉じます。
画面上では、レポートブックが閉じた時にブック上のユーザーフォームも消えてしまいますが、明示的にフォームを閉じるコードを記入します。
 

標準モジュールの作成

標準モジュールを追加し、オブジェクト名を受入検査表とします。

帳票を出力するプロシージャはユーザーフォームの動作とは異なりますので、標準モジュールに作成していきます。
 

受入検査表の出力

受入検査表

帳票を出力するプロシージャをサブルーチンとして、標準モジュール 受入検査表に作成します。

Sub ShowAcceptInspectionReport()

'インプットボックス設定し、検査日を取得
Dim myMsg As String, myTitle As String, 検査日 As String
    myMsg = "検査日を入力してください" & vbCr & "(例:2023/01/01)"
    myTitle = "検査日入力"
    検査日 = Application.InputBox(prompt:=myMsg, Title:=myTitle, Default:=Format(Date, "yyyy/mm/dd"), Type:=2)

'インプットボックスの入力値を判定
If 検査日 = "False" Then
    Exit Sub
End If

    Application.ScreenUpdating = False
    
'作業ブックを開く
Workbooks.Open データ位置 & "在庫管理REPORT.xlsx"
    
'オブジェクト変数の取得
Dim wsInspectList As Worksheet
Set wsInspectList = Workbooks("在庫管理REPORT.xlsx").Sheets("受入検査表")

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

'検査表のリセット
If wsInspectListRow > 4 Then
    wsInspectList.Rows("5:" & wsInspectListRow).Delete Shift:=xlUp
End If

'検査表への書き込み
If frmItemInput.lstInput.ListCount > 0 Then
    wsInspectList.Cells(5, 1).Resize(frmItemInput.lstInput.ListCount, 6).Value = frmItemInput.lstInput.List()
End If

'最終行の再取得
wsInspectListRow = wsInspectList.Cells(Rows.Count, 1).End(xlUp).Row

'当日分の色付け
Dim i As Long
For i = 4 To wsInspectListRow
  If wsInspectList.Cells(i, 2).Value <= Format(検査日, "yy/mm/dd") Then
         wsInspectList.Range(Cells(i, 1), Cells(i, 13)).Interior.Color = &HCCFFCC
  End If
Next

'罫線の設定
With wsInspectList.Range("A4:M" & wsInspectListRow).Borders(xlInsideVertical)
    .LineStyle = xlDot
    .Weight = xlHairline
End With
With wsInspectList.Range("G4:G" & wsInspectListRow).Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .Weight = xlThin
End With
With wsInspectList.Range("I4:I" & wsInspectListRow).Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .Weight = xlThin
End With
With wsInspectList.Range("A4:M" & wsInspectListRow).Borders(xlInsideHorizontal)
    .LineStyle = xlDot
    .Weight = xlHairline
End With

'表題の作成
wsInspectList.Cells(2, 1).Value = "● " & Format(検査日, "yyyy/mm/dd") & " 受入検査記録表"

'ブックの最大化
wsInspectList.Activate
ActiveWindow.WindowState = xlMaximized

'印刷範囲の設定
wsInspectList.PageSetup.PrintArea = wsInspectList.Range("A1:M" & wsInspectListRow).Address

'印刷プレビューの表示
Application.CommandBars.ExecuteMso "PrintPreviewAndPrint"

    Application.ScreenUpdating = True

'出力フォームの表示
frmAcceptInspectionReport.show

End Sub

 
@1. 検査日の取得
インプットボックスの機能を使って、ユーザーに検査日を入力して貰います。

@2. 入力値の判定
インプットボックスのキャンセルが押された場合は、プロシージャを抜けます。

@3. 作業ブックを開く
エクセルの描画を止め、データブックを開き、作業シートを変数に格納します。
このとき、作業シートに前回のデータが残っているので、削除用に最終行も取得します。

@4. 検査表のリセット
検査表の前回データを削除します。

@5. 検査表への書き込み
商品入庫画面に表示させた、入庫予定リストを検査表へ書き込みます。
プロシージャは標準モジュールに書かれているので、オブジェクト(lstInput)はモジュール名から記入(frmItemInput.lstInput)し、指定します。

@6. 書式設定
入庫予定日が検査日以前の場合は、色がけします。
罫線は、線の種類と太さを設定しながら引きます。
標題を設定し、受入検査表が完成です。

@7. 印刷設定
印刷範囲を指定し、プレビュー画面を表示させます。

@8. 終了フラグ
出力フォームを表示して、処理は終了です。
 

受入検査表ボタンの設定

受入検査表ボタンクリック時の動作を作成します。サブルーチンを実行させます。

Private Sub btnAcceptInspectionReport_Click()

'入庫予定リストの表示
Call ShowInputAllScheduleList

'受入検査表の出力
Call ShowAcceptInspectionReport

End Sub

@1. サブルーチンの実行
検査表への出力用リストを作成した後、受入検査表出力のプロシージャを実行します。
 

受入検査表の出力

受入検査表ボタンをクリックし、動作を確認します。

画面上では、商品入庫画面の上に、受入検査表。更にその上に、出力フォームが表示されている状態です。

出力時は、出力フォームがアクティブな状態なので、印刷するには、エクセルシートをクリックしアクティブにしてから、印刷ボタンをクリックします。2回、クリックが必要になります。

 

商品入庫画面の帳票出力部分ができました。
次回は商品入庫画面の入力支援を作成し、完成させます。
www.minizaiko.com