前回、商品入庫画面の修正/削除機能を作成しました。
この記事では、受入検査表を例に帳票の出力方法を解説します。
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