ダウンロード
テーブル一覧
ログイン
フォーム
VBAコード
メインメニュー
フォーム
VBAコード
入出庫処理
フォーム
VBAコード
入出庫履歴
フォーム
クエリ
VBAコード
在庫検索
クエリ
VBAコード
安全在庫
フォーム
クエリ
VBAコード
在庫転送
フォーム
VBAコード
単位変換
フォーム
VBAコード
インポートとテーブルクリア
フォーム
VBAコード
マスタ
BOM構成
フォーム
VBAコード
エラーログ
その他
ハッシュ値
参照設定
バーコード
完成したら
標準モジュールVBAコード
フォーム・F_入出庫履歴
フォームを先に載せておりますが、画面下半分のサブフォームの内容を先に作らないと画面はできません。クエリを先に作成ください。
入出庫履歴を表示するフォームです。全て見えると規模によっては邪魔になりますので、「品目型式」、「履歴の開始日付」、「履歴の終了日付」で検索できるようにしています。
サブフォームの配置の仕方
- 【デザイン】タブのコントロールのサブフォームをクリックします。このとき、【コントロールウィザードの使用】をONしておきます。
- 下の図のまま【次へ】をクリックします。
- 【テーブル/クエリ】から「Q_入出庫履歴」を選び、全ての項目を【選択したフィールド】へ移します。
- 【完了】でも良いですが、【次へ】をクリックすればサブフォームの名前を付ける画面になります。
サブフォームサイズや、フィールドの幅は各自適宜変えてください。
名前は「Q_入出庫履歴のサブフォーム」のままとしました。気に入らない方は変えてください。
入出庫処理取り消し
当初、取り消し処理のコードを用意していましたが、「削除」フィールドを利用することにしました。
フォーム「入出庫履歴」のフィールド「入出庫」の項目をダブルクリックしますと、入出庫処理取り消しの確認のメッセージボックスが表示されます。そこで「はい(Yes)」を選択すると、該当する入出庫処理のフィールド「削除」にチェックが入ります。このチェックが入った処理は「在庫検索」処理にも反映されません。
クエリ・Q_メイン
- 【作成】-【クエリデザイン】から「メイン」「品目」「入出庫」「社員」「単位」を選びます。
- 「メイン」と他の共通するコードを連結します。例えば「品目コード」を結びます。この時、結合線をダブルクリックしてプロパティを開き、
2の「’メイン’の全レコードと’品目’の同じ結合フィールドのレコードだけを含める」とします。他の結合線も同様です。
※必要に応じて表示させる項目を追加・削除してください。
このクエリから「Q_入出庫履歴」と「Q_集計」に転用します。「Q_入出庫履歴」と「Q_集計」はQ_メインを使わずに独自に作っても全然構いません。
SQLビュー
下記の記述を【SQLビュー】からコピペすると早いです。在庫管理システムVer.2.00β版。
SELECT T_入出庫処理.ID, T_入出庫処理.日付, T_入出庫処理.品目コード, T_品目.品目型式, T_品目.[メーカー], T_入出庫処理.数量, T_単位.単位, T_社員.社員, T_品目.[単価]*[数量] AS 金額, T_入出庫.入出庫, T_保管場所.保管場所, T_指図番号.指図番号, T_入出庫処理.削除, T_入出庫処理.削除日付
FROM ((((((T_入出庫処理 LEFT JOIN T_品目 ON T_入出庫処理.品目コード = T_品目.品目コード) LEFT JOIN T_仕入先 ON T_品目.仕入先コード = T_仕入先.仕入先コード) LEFT JOIN T_入出庫 ON T_入出庫処理.入出庫コード = T_入出庫.入出庫コード) LEFT JOIN T_社員 ON T_入出庫処理.社員コード = T_社員.社員コード) LEFT JOIN T_単位 ON T_入出庫処理.単位コード = T_単位.単位コード) LEFT JOIN T_保管場所 ON T_入出庫処理.保管場所コード = T_保管場所.保管場所コード) LEFT JOIN T_指図番号 ON T_入出庫処理.指図番号 = T_指図番号.指図番号
ORDER BY T_入出庫処理.日付 DESC;
Q_入出庫履歴
Q_入出庫履歴には「Q_メイン」を利用します。
VBAを使わずにクエリにて抽出条件を記載する場合です。画像ですと抽出条件が見づらいため、表にします。
フィールド | 日付 | 品目型式 | [Forms]![F_入出庫履歴]![txt_開始日付] | [Forms]![F_入出庫履歴]![txt_終了日付] |
テーブル | Q_メイン | Q_メイン | ||
並べ替え | ||||
表示 | ||||
抽出条件 | >[Forms]![F_入出庫履歴]![txt_開始日付] And <[Forms]![F_入出庫履歴]![txt_終了日付] | Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*" | ||
または | <[Forms]![F_入出庫履歴]![txt_終了日付] | Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*" | Is Null | |
>[Forms]![F_入出庫履歴]![txt_開始日付] | Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*" | Is Null | ||
Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*" | Is Null | Is Null |
SQLビュー
SELECT Q_メイン.日付, Q_メイン.品目コード, Q_メイン.品目型式, Q_メイン.数量, Q_メイン.単位, Q_メイン.[メーカー], Q_メイン.保管場所, Q_メイン.入出庫, Q_メイン.社員, Q_メイン.削除, Q_メイン.ID, Q_メイン.削除日付
FROM Q_メイン
ORDER BY Q_メイン.日付 DESC;
VBAコード
Ver.2.10
フォーム・F_入出庫履歴のVBA
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
On Error GoTo 終了
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
If lngDisplayRes >= 1920 Then Me.Width = 25000 Else Me.Width = 20000
Call Form_Resize
txt_終了日付.Value = Date + 1 '今日の日付を初期値にする
Exit Sub
終了:
Call エラーログ("F_入出庫履歴", "Form_Load")
End Sub
'---------------------------------
Private Sub Form_Resize()
'---------------------------------
'サブルーチンAdjustWidthはM_画面にあります
'---------------------------------
Call AdjustWidth(Me, Me.SF_入出庫履歴, 0)
End Sub
'---------------------------------
Private Sub cmd_検索_Click()
On Error GoTo 終了
Dim strFilter As String
strFilter = ""
If (Not IsNull(Me.cmb_品目型式)) Then
strFilter = "(SF_入出庫履歴.品目型式 Like '*' & [Forms]![F_入出庫履歴]![cmb_品目型式] & '*')"
If (Not IsNull(Me.txt_開始日付)) Or (Not IsNull(Me.txt_終了日付)) Then
strFilter = strFilter & " and "
End If
End If
If (Not IsNull(Me.txt_開始日付)) Then
strFilter = strFilter & "SF_入出庫履歴.日付 >= [Forms]![F_入出庫履歴]![txt_開始日付]"
If (Not IsNull(Me.txt_終了日付)) Then
strFilter = strFilter & " and "
End If
End If
If (Not IsNull(Me.txt_終了日付)) Then
strFilter = strFilter & "SF_入出庫履歴.日付 <= [Forms]![F_入出庫履歴]![txt_終了日付]"
End If
If (Not IsNull(strFilter)) Then
With Me.SF_入出庫履歴.Form
.Requery
.Filter = strFilter
.FilterOn = True
End With
End If
'---------------------------------
'サブルーチン検索履歴はM_在庫管理にあります
'---------------------------------
If IsNull(cmb_品目型式) = False Then Call 検索履歴(Me.cmb_品目型式) 'コンボボックスの検索ワードをT_検索履歴に追加する
Me.cmb_品目型式.Requery
Exit Sub
終了:
Call エラーログ("F_入出庫履歴", "cmd_検索_Click")
End Sub
'---------------------------------
Private Sub cmb_品目型式_Change()
Call cmd_検索_Click
End Sub
'---------------------------------
Private Sub txt_開始日付_Change()
Call cmd_検索_Click
End Sub
'---------------------------------
Private Sub txt_終了日付_Change()
Call cmd_検索_Click
End Sub
'---------------------------------
Private Sub cmd_エクスポート_Click()
On Error GoTo 終了
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Q_入出庫履歴", "在庫管理.xls", True, "入出庫履歴"
MsgBox ("マイドキュメントにエクスポートしました")
Exit Sub
終了:
Call エラーログ("F_入出庫履歴", "cmd_エクスポート_Click")
End Sub
'---------------------------------
Private Sub cmd_終了_Click()
DoCmd.Close
End Sub
'---------------------------------
' マウスドラッグでフォーム移動
'---------------------------------
Private Sub フォームヘッダー_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And acLeftButton Then
ReleaseCapture
Call SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End If
End Sub
'---------------------------------
Private Sub 詳細_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And acLeftButton Then
ReleaseCapture
Call SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End If
End Sub
サブフォーム・SF_入出庫履歴のVBA
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
End Sub
'---------------------------------
Private Sub 入出庫_DblClick(Cancel As Integer)
On Error GoTo 終了
Dim rs As DAO.Recordset
If Me!削除.Value = True Then Exit Sub
If MsgBox("処理を取り消しますか?", vbYesNo, "処理取消") = vbYes Then
Set rs = CurrentDb.OpenRecordset("T_入出庫処理")
With rs
.FindFirst "ID=" & Me!ID
.Edit
.Fields("削除") = True
.Fields("削除日付") = Date
.Update
End With
Set rs = Nothing
MsgBox ("処理を取り消しました")
End If
Exit Sub
終了:
Call エラーログ("F_入出庫履歴", "入出庫_DblClick")
End Sub