簡易マニュアル
ダウンロード
テーブル一覧
ログイン
フォーム
VBAコード
メインメニュー
フォーム
VBAコード
入出庫処理
フォーム
VBAコード
入出庫履歴
フォーム
クエリ
VBAコード
在庫検索
クエリ
VBAコード
安全在庫
フォーム
クエリ
VBAコード
在庫転送
フォーム
VBAコード
単位変換
フォーム
VBAコード
インポートとテーブルクリア
フォーム
VBAコード
マスタ
BOM構成
フォーム
VBAコード
エラーログ
その他
ハッシュ値
参照設定
バーコード
完成したら
標準モジュールVBAコード
ダウンロード
テーブル一覧
ログイン
フォーム
VBAコード
メインメニュー
フォーム
VBAコード
入出庫処理
フォーム
VBAコード
入出庫履歴
フォーム
クエリ
VBAコード
在庫検索
クエリ
VBAコード
安全在庫
フォーム
クエリ
VBAコード
在庫転送
フォーム
VBAコード
単位変換
フォーム
VBAコード
インポートとテーブルクリア
フォーム
VBAコード
マスタ
BOM構成
フォーム
VBAコード
エラーログ
その他
ハッシュ値
参照設定
バーコード
完成したら
標準モジュールVBAコード
簡易版Ver.2.10の全ソースコードです。Accessファイルをダウンロードして、VBエディタで見ても同じものです。
Ver.2.20に関しては体調が回復次第とします。64bit版対応のためにDeclare Functionを#If VB7 Then~#Else~#End Ifで囲んでいます。
フォーム・サブフォーム
F_メイン
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
On Error GoTo 終了
Dim txtVer As String
Dim txtβ As String
Dim rst As DAO.Recordset
Dim sql As String
CloseWindow Application.hWndAccessApp 'Accessを最小化する
'---------------------------------
'サブルーチン初期値はM_Initializeにあります
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call 初期値
Call FormInit(Me.Form)
txtVer = Format(GetDatabaeLast("T_バージョン履歴", "バージョン"), "0.00")
txtβ = GetDatabaeLast("T_バージョン履歴", "β")
lbl_Title.Caption = lbl_Title.Caption & " Ver." & txtVer & txtβ
Set rst = CurrentDb.OpenRecordset("T_ログイン履歴")
With rst
.AddNew
.Fields("日時") = Now
.Fields("IPアドレス") = GetIPAddress
.Fields("コンピュータ名") = ComputerName '不要であればコメントアウトしてください。
.Fields("ユーザー名") = UserName '不要であればコメントアウトしてください。
.Update
'書き込んだIDを記憶する
rst.MoveLast
intID = Val(rst.Fields("ID"))
End With
rst.Close
Set rst = Nothing
Exit Sub
終了:
Call エラーログ("F_メイン", "Form_Load")
End Sub
'---------------------------------
Private Sub cmd_入出庫処理_Click()
DoCmd.OpenForm "F_入出庫処理"
End Sub
'---------------------------------
Private Sub cmd_入出庫履歴_Click()
DoCmd.OpenForm "F_入出庫履歴"
End Sub
'---------------------------------
Private Sub cmd_在庫検索_Click()
DoCmd.OpenForm "F_在庫検索"
End Sub
'---------------------------------
Private Sub cmd_安全在庫_Click()
DoCmd.OpenForm "F_安全在庫"
End Sub
'---------------------------------
Private Sub cmd_品目マスタ_Click()
DoCmd.OpenForm "F_品目マスタ"
End Sub
'---------------------------------
Private Sub cmd_ログイン履歴_Click()
DoCmd.OpenForm "F_ログイン履歴"
End Sub
'---------------------------------
Private Sub cmd_TableClear_Click()
On Error GoTo 終了
DoCmd.OpenForm "F_テーブルクリア"
Forms![F_テーブルクリア]![lbl_タイトル].Caption = "テーブルクリア"
Forms![F_テーブルクリア].Caption = "テーブルクリア"
Exit Sub
終了:
Call エラーログ("F_メイン", "cmd_TableClear_Click")
End Sub
'---------------------------------
Private Sub cmd_インポート_Click()
On Error GoTo 終了
DoCmd.OpenForm "F_テーブルクリア"
Forms![F_テーブルクリア]![lbl_タイトル].Caption = "インポート"
Forms![F_テーブルクリア].Caption = "インポート"
Exit Sub
終了:
Call エラーログ("F_メイン", "cmd_インポート_Click")
End Sub
'---------------------------------
Private Sub cmd_各種設定_Click()
On Error GoTo 終了
strMaster = "各種設定"
DoCmd.OpenForm "F_各種設定"
Forms![F_各種設定]![lbl_タイトル].Caption = "各種設定"
Forms![F_各種設定].Caption = "各種設定"
Forms![F_各種設定].[SF_各種設定].Visible = True
Exit Sub
終了:
Call エラーログ("F_メイン", "cmd_各種設定_Click")
End Sub
'---------------------------------
Private Sub cmd_単位マスタ_Click()
On Error GoTo 終了
strMaster = "単位マスタ"
DoCmd.OpenForm "F_各種設定"
Forms![F_各種設定]![lbl_タイトル].Caption = "単位マスタ"
Forms![F_各種設定].Caption = "単位マスタ"
Forms![F_各種設定].[SF_単位].Visible = True
Exit Sub
終了:
Call エラーログ("F_メイン", "cmd_単位マスタ_Click")
End Sub
'---------------------------------
Private Sub cmd_入出庫マスタ_Click()
On Error GoTo 終了
strMaster = "入出庫マスタ"
DoCmd.OpenForm "F_各種設定"
Forms![F_各種設定]![lbl_タイトル].Caption = "入出庫マスタ"
Forms![F_各種設定].Caption = "入出庫マスタ"
Forms![F_各種設定].[SF_入出庫].Visible = True
Exit Sub
終了:
Call エラーログ("F_メイン", "cmd_入出庫マスタ_Click")
End Sub
'---------------------------------
Private Sub cmd_保管場所マスタ_Click()
On Error GoTo 終了
strMaster = "保管場所マスタ"
DoCmd.OpenForm "F_各種設定"
Forms![F_各種設定]![lbl_タイトル].Caption = "保管場所マスタ"
Forms![F_各種設定].Caption = "保管場所マスタ"
Forms![F_各種設定].[SF_保管場所].Visible = True
Exit Sub
終了:
Call エラーログ("F_メイン", "cmd_保管場所マスタ_Click")
End Sub
'---------------------------------
Private Sub cmd_エラーログ_Click()
DoCmd.OpenForm "F_エラーログ"
End Sub
'---------------------------------
'閉じる時にログアウト日時を記録
'---------------------------------
Private Sub cmd_閉じる_Click()
On Error GoTo 終了 'ログインなしに開いた場合にエラーになるため
Dim dbs As Database
Dim rst As DAO.Recordset
Dim sql As String
Set dbs = CurrentDb
Set rst = CurrentDb.OpenRecordset("T_ログイン履歴", dbOpenDynaset)
With rst
.FindFirst "id=" & Str(intID)
.Edit
.Fields("ログアウト日時") = Now
.Update
.Close
End With
Set rst = Nothing
DoCmd.Close
'DoCmd.Quit 'コメントを外すと、終了時にAccessを閉じます。
Exit Sub
終了:
Call エラーログ("F_メイン", "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
'---------------------------------
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
F_ログイン履歴
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
Call Form_Resize
End Sub
'---------------------------------
Private Sub Form_Resize()
'---------------------------------
'サブルーチンAdjustWidthはM_画面にあります
'---------------------------------
Call AdjustWidth(Me, Me.SF_ログイン履歴, 0)
End Sub
'---------------------------------
Private Sub cmd_clear_Click()
DoCmd.RunSQL "DELETE FROM T_ログイン履歴"
DoCmd.Requery
End Sub
'---------------------------------
Private Sub cmd_close_Click()
DoCmd.Close
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 フォームヘッダー_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_ログイン履歴
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
End Sub
F_入出庫処理
Option Compare Database
Option Explicit
'---------------------------------
Private int入庫 As Integer
Private int入庫取消 As Integer
Private int出庫 As Integer
Private int出庫取消 As Integer
Private int個 As Integer
'---------------------------------
Private Sub Form_Load()
On Error GoTo 終了
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
Call Form_Resize
'---------------------------------
'関数ReadDatabaseはM_外部データベースにあります
'---------------------------------
int入庫 = Val(ReadDatabase("T_入出庫", "入出庫", "入庫", "入出庫コード"))
int入庫取消 = Val(ReadDatabase("T_入出庫", "入出庫", "入庫取消", "入出庫コード"))
int出庫 = Val(ReadDatabase("T_入出庫", "入出庫", "出庫", "入出庫コード"))
int出庫取消 = Val(ReadDatabase("T_入出庫", "入出庫", "出庫取消", "入出庫コード"))
int個 = Val(ReadDatabase("T_単位", "単位", "個", "単位コード"))
Call ClearControls
Exit Sub
終了:
Call エラーログ("F_入出庫処理", "Form_Load")
End Sub
'---------------------------------
Private Sub Form_Resize()
'---------------------------------
'サブルーチンAdjustWidthはM_画面にあります
'---------------------------------
Call AdjustWidth(Me, Me.SF_品目, 567)
End Sub
'---------------------------------
Private Sub cmd_検索_Click()
On Error GoTo 終了
Dim strFilter1 As String
Dim strFilter2 As String
With Me.SF_品目.Form
.OrderBy = "品目コード"
.FilterOn = True
End With
'---------------------------------
'サブルーチン検索履歴はM_在庫管理にあります
'---------------------------------
If IsNull(cmb_品目型式) = False Then Call 検索履歴(Me.cmb_品目型式) 'コンボボックスの検索ワードをT_検索履歴に追加する
Me.cmb_品目型式.Requery
Exit Sub
終了:
Call エラーログ("F_入出庫処理", "cmd_検索_Click")
End Sub
'---------------------------------
Private Sub cmd_在庫検索_Click()
DoCmd.OpenForm "F_在庫検索"
End Sub
'---------------------------------
Private Sub cmb_品目型式_Change()
Call cmd_検索_Click
End Sub
'---------------------------------
' 入出庫処理本体
'---------------------------------
Private Sub cmd_OK_Click()
On Error GoTo 終了
'空欄チェック
Dim bBlank As Boolean
Dim rst As DAO.Recordset
Dim rst2 As DAO.Recordset
Dim sql1, sql2, sql3 As String
bBlank = False
If IsNull(Me.cmb_品目) Then cmb_品目.BackColor = vbYellow: bBlank = True Else cmb_品目.BackColor = vbWhite
If Me.txt_数量 = "" Then txt_数量.BackColor = vbYellow: bBlank = True Else txt_数量.BackColor = vbWhite
If IsNull(Me.cmb_単位) Then cmb_単位.BackColor = vbYellow: bBlank = True Else cmb_単位.BackColor = vbWhite
If IsNull(Me.cmb_入出庫) Then cmb_入出庫.BackColor = vbYellow: bBlank = True Else cmb_入出庫.BackColor = vbWhite
If IsNull(Me.cmb_保管場所) Then cmb_保管場所.BackColor = vbYellow: bBlank = True Else cmb_保管場所.BackColor = vbWhite
If bBlank = True Then
MsgBox ("空欄があります")
Exit Sub
End If
Set rst = CurrentDb.OpenRecordset("T_入出庫処理")
With rst
.AddNew
.Fields("日付") = Now
.Fields("品目コード") = Me.cmb_品目
.Fields("入出庫コード") = Me.cmb_入出庫
.Fields("数量") = Me.txt_数量
.Fields("単位コード") = Me.cmb_単位
.Fields("保管場所コード") = Me.cmb_保管場所
.Fields("社員コード") = lngLoginID
.Update
.Close
End With
Set rst = Nothing
MsgBox ("記入しました")
Call ClearControls
Me.SF_品目.Form.FilterOn = True
Exit Sub
終了:
Call エラーログ("F_入出庫処理", "cmd_OK_Click")
Resume Next
End Sub
'---------------------------------
Private Sub cmd_cancel_Click()
Call ClearControls
End Sub
'---------------------------------
Sub ClearControls()
With Me
.cmb_品目.Value = ""
.lbl_品目.Caption = ""
.txt_数量.Value = ""
.cmb_単位.Value = int個
.lbl_単位.Caption = "個"
.cmb_入出庫.Value = ""
.lbl_入出庫.Caption = ""
.cmb_保管場所.Value = ""
.lbl_保管場所.Caption = ""
End With
End Sub
'---------------------------------
Private Sub cmb_品目_AfterUpdate()
On Error GoTo 終了
Me.lbl_品目.Caption = cmb_品目.Column(1)
If IsNull(Me.cmb_品目) Then cmb_品目.BackColor = vbYellow Else cmb_品目.BackColor = vbWhite
Exit Sub
終了:
Call エラーログ("F_入出庫処理", "cmb_品目_AfterUpdate")
End Sub
'---------------------------------
Private Sub txt_数量_AfterUpdate()
On Error GoTo 終了
If Me.txt_数量 = "" Then txt_数量.BackColor = vbYellow Else txt_数量.BackColor = vbWhite
Exit Sub
終了:
Call エラーログ("F_入出庫処理", "txt_数量_AfterUpdate")
End Sub
'---------------------------------
Private Sub cmb_単位_AfterUpdate()
On Error GoTo 終了
Me.lbl_単位.Caption = cmb_単位.Column(1)
If IsNull(Me.cmb_単位) Then cmb_単位.BackColor = vbYellow Else cmb_単位.BackColor = vbWhite
Exit Sub
終了:
Call エラーログ("F_入出庫処理", "cmb_単位_AfterUpdate")
End Sub
'---------------------------------
Private Sub cmb_入出庫_BeforeUpdate(Cancel As Integer)
On Error GoTo 終了
If (Me.cmb_入出庫.Value = int出庫 Or _
Me.cmb_入出庫.Value = int入庫取消) _
And Me.txt_数量.Value > 0 Then
Me.txt_数量.Value = Me.txt_数量.Value * (-1)
End If
If (Me.cmb_入出庫.Value = int出庫取消 Or _
Me.cmb_入出庫.Value = int入庫) _
And Me.txt_数量.Value < 0 Then
Me.txt_数量.Value = Me.txt_数量.Value * (-1)
End If
Exit Sub
終了:
Call エラーログ("F_入出庫処理", "cmb_入出庫_BeforeUpdate")
End Sub
'---------------------------------
Private Sub cmb_入出庫_AfterUpdate()
On Error GoTo 終了
Me.lbl_入出庫.Caption = cmb_入出庫.Column(1)
If IsNull(Me.cmb_入出庫) Then cmb_入出庫.BackColor = vbYellow Else cmb_入出庫.BackColor = vbWhite
Exit Sub
終了:
Call エラーログ("F_入出庫処理", "cmb_入出庫_AfterUpdate")
End Sub
'---------------------------------
Private Sub cmb_保管場所_AfterUpdate()
On Error GoTo 終了
Me.lbl_保管場所.Caption = cmb_保管場所.Column(1)
If IsNull(Me.cmb_保管場所) Then cmb_保管場所.BackColor = vbYellow Else cmb_保管場所.BackColor = vbWhite
Exit Sub
終了:
Call エラーログ("F_入出庫処理", "cmb_保管場所_AfterUpdate")
End Sub
'---------------------------------
Private Sub cmd_入出庫履歴_Click()
On Error GoTo 終了
DoCmd.OpenForm "F_入出庫履歴"
DoCmd.Close acForm, "F_入出庫処理", acSaveNo
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_品目
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
Me.AllowEdits = False
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("削除日付") = Now
.Update
End With
Set rs = Nothing
MsgBox ("処理を取り消しました")
End If
Exit Sub
終了:
Call エラーログ("SF_品目", "入出庫_DblClick")
End Sub
'---------------------------------
Private Sub 品目コード_DblClick(Cancel As Integer)
'---------------------------------
'サブルーチン処理はM_在庫管理にあります
'---------------------------------
Call 処理(Me.Form)
End Sub
'---------------------------------
Private Sub 品目型式_DblClick(Cancel As Integer)
Call 処理(Me.Form)
End Sub
F_入出庫履歴
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_入出庫履歴
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
Me.AllowEdits = False
End Sub
F_在庫検索
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
Call Form_Resize
End Sub
'---------------------------------
Private Sub Form_Resize()
'---------------------------------
'サブルーチンAdjustWidthはM_画面にあります
'---------------------------------
Call AdjustWidth(Me, Me.SF_在庫検索, 0)
End Sub
'---------------------------------
Private Sub cmd_検索_Click()
On Error GoTo 終了
Dim strFilter1 As String
strFilter1 = str検索フィルタ
With Me.SF_在庫検索.Form
.Filter = strFilter1
.FilterOn = True
End With
'---------------------------------
'サブルーチン検索履歴は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 cmd_エクスポート_Click()
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Q_集計", "在庫管理.xls", True, "在庫数"
MsgBox ("マイドキュメントにエクスポートしました")
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_在庫検索
Option Compare Database
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
End Sub
'---------------------------------
Private Sub 品目型式_DblClick(Cancel As Integer)
On Error GoTo 終了
Forms![F_入出庫処理]![cmb_品目].Value = Me.品目コード.Value
Forms![F_入出庫処理]![lbl_品目].Caption = Me.品目型式.Value
Forms![F_入出庫処理]![cmb_保管場所].Value = Me.保管場所コード.Value
Forms![F_入出庫処理]![lbl_保管場所].Caption = Me.保管場所.Value
DoCmd.Close
Exit Sub
終了:
Call エラーログ("SF_在庫検索", "品目型式_DblClick")
End Sub
F_安全在庫
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
Call Form_Resize
End Sub
'---------------------------------
Private Sub Form_Resize()
'---------------------------------
'サブルーチンAdjustWidthはM_画面にあります
'---------------------------------
Call AdjustWidth(Me, Me.SF_安全在庫, 0)
End Sub
'---------------------------------
Private Sub cmd_検索_Click()
On Error GoTo 終了
Dim strFilter1 As String
strFilter1 = str検索フィルタ
With Me.SF_安全在庫.Form
.Filter = strFilter1
.FilterOn = True
End With
'---------------------------------
'サブルーチン検索履歴は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 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_安全在庫
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
Me.AllowEdits = False
End Sub
F_テーブルクリア
Option Compare Database
Option Explicit
'---------------------------------
'インポートのルーチンと共用にしました。
'---------------------------------
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
End Sub
'---------------------------------
Private Sub cmd_実行_Click()
On Error GoTo 終了
Dim objRec As ADODB.Recordset
'全てチェックされていなければ実行しない
If chk_ログイン履歴.Value = False And _
chk_検索履歴.Value = False And _
chk_入出庫処理.Value = False And _
chk_品目マスタ.Value = False And _
chk_保管場所.Value = False And _
chk_入出庫コード.Value = False And _
chk_単位コード.Value = False And _
chk_各種設定.Value = False Then
Exit Sub
End If
Select Case lbl_タイトル.Caption
Case "インポート"
'---------------------------------
'以下のサブルーチンM_外部データベースにあります
'---------------------------------
If MsgBox("旧バージョンのデータベースファイルを選択してください。" & vbCr _
& "現在のテーブルを消去してインポートします。" & vbCr _
& "必ずバックアップを取って実行してください。" & vbCr _
& "よろしければYesをクリックしてください", vbYesNo) = vbYes Then
'---------------------------------
'サブルーチンADO_CONNECTIONはM_外部データベースにあります
'---------------------------------
If ADO_CONNECTION = False Then
MsgBox "インポートはキャンセルされました"
Exit Sub
End If
If chk_品目マスタ.Value = True Then Call 品目
If chk_単位コード.Value = True Then Call 単位
If chk_保管場所.Value = True Then Call 保管場所
If chk_入出庫コード.Value = True Then Call 入出庫
If chk_入出庫処理.Value = True Then Call 入出庫処理
If chk_検索履歴.Value = True Then Call 検索クリア
If chk_ログイン履歴.Value = True Then Call ログイン履歴
If chk_各種設定.Value = True Then Call 各種設定
MsgBox ("インポートが完了しました")
'---------------------------------
'サブルーチンADO_DISCONNECTIONはM_外部データベースにあります
'---------------------------------
Call ADO_DISCONNECTION
End If
Case "テーブルクリア"
If MsgBox("レコードを削除してもよろしいですか?", vbYesNo) = vbYes Then
DoCmd.SetWarnings False
If chk_ログイン履歴.Value = True Then DoCmd.RunSQL "DELETE * FROM T_ログイン履歴"
If chk_検索履歴.Value = True Then DoCmd.RunSQL "DELETE * FROM T_検索履歴"
If chk_入出庫処理.Value = True Then DoCmd.RunSQL "DELETE * FROM T_入出庫処理"
If chk_品目マスタ.Value = True Then DoCmd.RunSQL "DELETE * FROM T_品目"
If chk_保管場所.Value = True Then DoCmd.RunSQL "DELETE * FROM T_保管場所"
If chk_入出庫コード.Value = True Then DoCmd.RunSQL "DELETE * FROM T_入出庫"
If chk_単位コード.Value = True Then DoCmd.RunSQL "DELETE * FROM T_単位"
If chk_各種設定.Value = True Then DoCmd.RunSQL "DELETE * FROM T_各種設定"
MsgBox "削除しました"
DoCmd.Close
End If
End Select
Exit Sub
終了:
Call エラーログ("F_テーブルクリア", "cmd_実行_Click")
End Sub
'---------------------------------
Private Sub chk_all_Click()
If chk_all.Value = True Then
chk_ログイン履歴.Value = True
chk_検索履歴.Value = True
chk_入出庫処理.Value = True
chk_品目マスタ.Value = True
chk_保管場所.Value = True
chk_入出庫コード.Value = True
chk_単位コード.Value = True
chk_各種設定.Value = True
Else
chk_ログイン履歴.Value = False
chk_検索履歴.Value = False
chk_入出庫処理.Value = False
chk_品目マスタ.Value = False
chk_保管場所.Value = False
chk_入出庫コード.Value = False
chk_単位コード.Value = False
chk_各種設定.Value = False
End If
End Sub
'---------------------------------
Private Sub chk_ログイン履歴_Click()
If chk_ログイン履歴.Value = False Then chk_all.Value = False
End Sub
'---------------------------------
Private Sub chk_検索履歴_Click()
If chk_検索履歴.Value = False Then chk_all.Value = False
End Sub
'---------------------------------
Private Sub chk_入出庫処理_Click()
If chk_入出庫処理.Value = False Then chk_all.Value = False
End Sub
Private Sub chk_品目マスタ_Click()
If chk_品目マスタ.Value = False Then chk_all.Value = False
End Sub
'---------------------------------
Private Sub chk_保管場所_Click()
If chk_保管場所.Value = False Then chk_all.Value = False
End Sub
'---------------------------------
Private Sub chk_入出庫コード_Click()
If chk_入出庫コード.Value = False Then chk_all.Value = False
End Sub
'---------------------------------
Private Sub chk_単位コード_Click()
If chk_単位コード.Value = False Then chk_all.Value = False
End Sub
'---------------------------------
Private Sub chk_各種設定_Click()
If chk_各種設定.Value = False Then chk_all.Value = False
End Sub
'---------------------------------
Private Sub cmd_cancel_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
F_品目マスタ
Option Compare Database
Option Explicit
'---------------------------------
Private Sub cmd_更新_Click()
On Error GoTo 終了
Dim rst As DAO.Recordset
Dim sql As String
sql = "SELECT * FROM T_品目 WHERE '品目コード= " & Me.txt_品目コード & "'"
Set rst = CurrentDb.OpenRecordset(sql)
rst.FindFirst "品目コード= " & Me.txt_品目コード
With rst
.Edit
.Fields("品目型式") = Me.txt_品目型式
.Fields("メーカー") = Me.txt_メーカー
.Fields("安全在庫") = Me.txt_安全在庫
.Fields("最小ロット") = Me.txt_最小ロット
.Fields("標準ロット") = Me.txt_標準ロット
.Fields("標準納期") = Me.txt_標準納期
.Fields("単価") = Me.txt_単価
.Fields("Webサイト") = Me.txt_Webサイト
.Fields("削除") = Me.chk_削除
.Update
.Close
End With
Set rst = Nothing
Me.SF_品目マスタ.Requery
Exit Sub
終了:
Call エラーログ("F_品目マスタ", "cmd_更新_Click")
End Sub
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
Call Form_Resize
End Sub
'---------------------------------
Private Sub Form_Resize()
'---------------------------------
'サブルーチンAdjustWidthはM_画面にあります
'---------------------------------
Call AdjustWidth(Me, Me.SF_品目マスタ, 0)
End Sub
'---------------------------------
Private Sub cmd_インポート_Click()
On Error GoTo 終了
'---------------------------------
'サブルーチンImportFromExcelはM_在庫管理にあります
'---------------------------------
ImportFromExcel ("品目")
Me.SF_品目マスタ.Requery
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_品目マスタ
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
Me.AllowEdits = False
End Sub
'---------------------------------
Private Sub Webサイト_Click()
Call DetailToTextBox
End Sub
'---------------------------------
Private Sub メーカー_Click()
Call DetailToTextBox
End Sub
'---------------------------------
Private Sub 安全在庫_Click()
Call DetailToTextBox
End Sub
'---------------------------------
Private Sub 最小ロット_Click()
Call DetailToTextBox
End Sub
Private Sub 削除_Click()
Call DetailToTextBox
End Sub
'---------------------------------
Private Sub 標準ロット_Click()
Call DetailToTextBox
End Sub
'---------------------------------
Private Sub 標準納期_Click()
Call DetailToTextBox
End Sub
'---------------------------------
Private Sub 品目コード_Click()
Call DetailToTextBox
End Sub
'---------------------------------
Private Sub 品目型式_Click()
Call DetailToTextBox
End Sub
'---------------------------------
Private Sub DetailToTextBox()
On Error GoTo 終了
Dim rst As DAO.Recordset
Set rst = Me.RecordsetClone
rst.Bookmark = Me.Bookmark
With Me.Parent
.txt_品目コード.Value = rst.Fields("品目コード")
.txt_品目型式.Value = rst.Fields("品目型式")
.txt_メーカー.Value = rst.Fields("メーカー")
.txt_単価.Value = rst.Fields("単価")
.txt_安全在庫.Value = rst.Fields("安全在庫")
.txt_最小ロット.Value = rst.Fields("最小ロット")
.txt_標準ロット.Value = rst.Fields("標準ロット")
.txt_標準納期.Value = rst.Fields("標準納期")
.txt_Webサイト.Value = rst.Fields("Webサイト")
.chk_削除.Value = rst.Fields("削除")
End With
Exit Sub
終了:
Call エラーログ("SF_品目マスタ", "DetailToTextBox")
End Sub
F_各種設定
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
Call Form_Resize
End Sub
'---------------------------------
Private Sub Form_Resize()
'---------------------------------
'サブルーチンAdjustWidthはM_画面にあります
'---------------------------------
Select Case strMaster
Case "各種設定"
Call AdjustWidth(Me, SF_各種設定, 0)
Case "入出庫マスタ"
Call AdjustWidth(Me, SF_入出庫, 0)
Case "保管場所マスタ"
Call AdjustWidth(Me, SF_保管場所, 0)
Case "単位マスタ"
Call AdjustWidth(Me, SF_単位, 0)
End Select
End Sub
'---------------------------------
Private Sub cmd_close_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_各種設定、SF_単位、SF_保管場所、SF_入出庫
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
Me.AllowEdits = False
End Sub
'---------------------------------
Private Sub Form_Close()
Me.Visible = False
End Sub、
F_エラーログ
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
Call Form_Resize
End Sub
'---------------------------------
Private Sub Form_Resize()
'---------------------------------
'サブルーチンAdjustWidthはM_画面にあります
'---------------------------------
Call AdjustWidth(Me, Me.SF_エラーログ, 0)
End Sub
'---------------------------------
Private Sub cmd_clear_Click()
DoCmd.RunSQL "DELETE FROM T_エラーログ"
DoCmd.Requery
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_エラーログ
Option Compare Database
Option Explicit
'---------------------------------
Private Sub Form_Load()
'---------------------------------
'サブルーチンFormInitはM_画面にあります
'---------------------------------
Call FormInit(Me.Form)
End Sub
標準モジュール
M_Initialize
Option Compare Database
Option Explicit
'---------------------------------
'フォームに共通するSub・Function
'---------------------------------
Public lngLoginID As Long 'ログインした社員コード
Public bAdmin As Boolean '管理者かどうか、管理者ならTrue、そうでなければFalse
Public strFileName As String 'デフォルトのフォルダは「マイドキュメント」です。
Public lngDisplayRes As Long '画面の解像度(1920x1080、1366x768などによってフォームのサイズを変更する場合にしようします)
Public intID As Integer 'ログインした際のログイン履歴のIDフィールド
Public lngBomID As Long
Public strMaster As String 'F_各種設定がどのコマンドボタンから呼ばれたか
Public str検索フィルタ As String
'---------------------------------
'フォームを最小化
'---------------------------------
Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long
'---------------------------------
'フォームをドラッグ
'---------------------------------
Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Sub ReleaseCapture Lib "user32.dll" ()
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
'---------------------------------
Public Sub 初期値()
On Error GoTo 終了
'---------------------------------
'関数GetWindowSizeはM_画面にあります
'関数GetDatabaeLastはM_在庫管理にあります
'---------------------------------
lngDisplayRes = GetWindowSize '画面の解像度を取得する
strFileName = ReadDatabase("T_各種設定", "パラメータ", "ExcelFileName", "設定値")
str検索フィルタ = ReadDatabase("T_各種設定", "パラメータ", "検索フィルタ", "設定値")
strMaster = ""
Exit Sub
終了:
Call エラーログ("M_Initialize", "初期値")
End Sub
M_IPアドレス
Option Compare Database
' 関数の宣言
' ユーザー名を取得
Private Declare PtrSafe Function GetUserName Lib "advapi32.dll" _
Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
' コンピュータ名を取得
Private Declare PtrSafe Function GetComputerName Lib "kernel32.dll" _
Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
' コンピュータ名を取得
Private Declare PtrSafe Function GetComputerNameEx Lib "kernel32.dll" _
Alias "GetComputerNameExA" (ByVal NameType As Long, ByVal lpBuffer As String, lpnSize As Long) As Long
' 参考Webサイト:https://mt-soft.sakura.ne.jp/kyozai/excel_vba/300_vba_kiso/70_getinfo/index.htm
'---------------------------------
'IPアドレスを取得する関数
'---------------------------------
Function GetIPAddress() As String
Dim NetAdapters, objNic, strIPAddress
Set NetAdapters = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") _
.ExecQuery("Select * from Win32_NetworkAdapterConfiguration " & _
"Where (IPEnabled = TRUE)")
For Each objNic In NetAdapters 'ネットワークアダプターは、複数ある場合がある
For Each strIPAddress In objNic.IPAddress 'IPは、複数割り当てられている場合がある
GetIPAddress = strIPAddress
Exit For ' 1回のみ
Next
Exit For ' 1回のみ
Next
End Function
'---------------------------------
' ログインユーザ名を取得する
'---------------------------------
Public Function UserName() As String
' ユーザー名の長さを示す定数
Const UNLEN = 256 + 1
Dim strUserNameBuffer As String * UNLEN
Dim lngUserNameLength As Long
Dim lngResult As Long
' ユーザー名の長さを設定
lngUserNameLength = Len(strUserNameBuffer)
' ユーザー名を取得
lngResult = GetUserName(strUserNameBuffer, lngUserNameLength)
' ユーザー名を表示
UserName = Left(strUserNameBuffer, InStr(strUserNameBuffer, vbNullChar) - 1)
End Function
'---------------------------------
' コンピュータ名を取得する
'---------------------------------
Public Function ComputerName() As String
' コンピュータ名の長さ
Const MAX_COMPUTERNAME_LENGTH = 15 + 1
Dim strComputerNameBuffer As String * MAX_COMPUTERNAME_LENGTH
Dim lngComputerNameLength As Long
Dim lngResult As Long
' コンピュータ名の長さを設定
lngComputerNameLength = Len(strComputerNameBuffer)
' コンピュータ名を取得
lngResult = GetComputerName(strComputerNameBuffer, lngComputerNameLength)
' コンピュータ名を取り出し
ComputerName = Left(strComputerNameBuffer, InStr(strComputerNameBuffer, vbNullChar) - 1)
End Function
M_画面
'---------------------------------
'フォームとは無関係のSub・Function
'---------------------------------
Option Compare Database
Option Explicit
'デスクトップサイズ取得関係のAPIの宣言
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Type RECT
x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type
'---------------------------------
Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long
'---------------------------------
'画面の解像度を取得する
'---------------------------------
Public Function GetWindowSize()
Dim r As RECT
Dim hwnd As Long
Dim lngWidth As Long
Dim lngHeight As Long
hwnd = GetDesktopWindow()
GetWindowRect hwnd, r
lngWidth = r.x2 - r.x1
lngHeight = r.y2 - r.y1
'MsgBox "ディスプレイの解像度は " & lngWidth & "×" & lngHeight
GetWindowSize = lngWidth
End Function
'---------------------------------
'サブフォームの大きさを変更するサブルーチン
'frm:フォーム
'ctl:コントロール
'---------------------------------
Public Sub AdjustWidth(strForm As Form, strCtrl As Control, lngTop As Long)
If strForm.InsideHeight < 6500 Then strForm.InsideHeight = 6500
strCtrl.Height = strCtrl.Height * 0.8 '最初にフォームの内側を小さくしておく
strForm.Section(acFooter).Height = strForm.InsideHeight - strForm.Section(acDetail).Height - strForm.Section(acHeader).Height - lngTop
strCtrl.Height = strForm.Section(acFooter).Height
'
strCtrl.Left = 0
strCtrl.Width = strForm.InsideWidth
End Sub
'---------------------------------
Public Sub FormInit(frm As Form)
On Error GoTo 終了
If lngDisplayRes >= 1920 Then frm.Width = 20000 Else frm.Width = 17000
frm.RecordSelectors = False 'レコードセレクタを非表示
frm.NavigationButtons = False '移動ボタン非表示
frm.ShortcutMenu = False '右クリック禁止
frm.ShortcutMenuBar = False
Exit Sub
終了:
Call エラーログ("M_画面", "FormInit")
End Sub
M_外部データベース
Option Compare Database
'---------------------------------
'* Accessデータベース接続
'参照:https://808hanablog.com/how-to-connect-to-external-access-with-vba
'---------------------------------
Public ADO_CN As ADODB.Connection 'ADOコネクション
'---------------------------------
Public Function ADO_CONNECTION() As Boolean
On Error GoTo 終了
Dim ACCESS_FILEPATH As String 'Accessファイルパス
'Accessファイルパス
ACCESS_FILEPATH = GetAccessFile
If ACCESS_FILEPATH <> "" Then
'Connectionオブジェクトのインスタンス化
Set ADO_CN = New ADODB.Connection
'Access接続
ADO_CN.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ACCESS_FILEPATH & ";"
ADO_CONNECTION = True
Else
ADO_CONNECTION = False
End If
Exit Function
終了:
Call エラーログ("M_外部データベース", "ADO_CONNECTION")
End Function
'---------------------------------
'* Accessデータベース接続解除
'---------------------------------
Public Sub ADO_DISCONNECTION()
'接続解除
ADO_CN.Close
Set ADO_CN = Nothing
End Sub
'---------------------------------
'参照:https://officevba.info/filedialog/
'要Microsoft Office ○○ Object Library
'[ツール]-[参照設定]にて設定
'---------------------------------
Public Function GetAccessFile()
On Error GoTo 終了
Dim i
Dim WSH As Object
Set WSH = CreateObject("Wscript.Shell")
Dim DesktopPath As String
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "ファイルの選択" 'ダイアログのタイトル
.Filters.Clear
.Filters.Add "Access", "*.mdb; *.accdb"
If .Show = True Then
For i = 1 To .SelectedItems.Count
GetAccessFile = .SelectedItems(i)
Next i
End If
End With
Set WSH = Nothing
Exit Function
終了:
Call エラーログ("M_外部データベース", "GetAccessFile")
End Function
'---------------------------------
Public Sub 品目()
On Error GoTo 終了
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("T_品目")
'T_品目
Set objRec = ADO_CN.Execute("T_品目", , adCmdTable)
DoCmd.RunSQL "DELETE * FROM T_品目"
While Not objRec.EOF 'テーブルの最後になれば終了
With rst
.AddNew
.Fields("品目コード") = objRec.Fields("品目コード").Value
.Fields("品目型式") = objRec.Fields("品目型式").Value
.Fields("メーカー") = objRec.Fields("メーカー").Value
.Fields("安全在庫") = objRec.Fields("安全在庫").Value
.Fields("最小ロット") = objRec.Fields("最小ロット").Value
.Fields("標準ロット") = objRec.Fields("標準ロット").Value
.Fields("標準納期") = objRec.Fields("標準納期").Value
.Fields("WEBサイト") = objRec.Fields("WEBサイト").Value
.Fields("削除") = objRec.Fields("削除").Value
.Update
End With
objRec.MoveNext
Wend
終了:
End Sub
'---------------------------------
Public Sub 単位()
On Error GoTo 終了
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("T_単位")
'T_単位
Set objRec = ADO_CN.Execute("T_単位", , adCmdTable)
DoCmd.RunSQL "DELETE * FROM T_単位"
While Not objRec.EOF 'テーブルの最後になれば終了
With rst
.AddNew
.Fields("単位コード") = objRec.Fields("単位コード").Value
.Fields("単位") = objRec.Fields("単位").Value
.Update
End With
objRec.MoveNext
Wend
終了:
End Sub
'---------------------------------
Public Sub 入出庫()
On Error GoTo 終了
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("T_入出庫")
'T_入出庫
Set objRec = ADO_CN.Execute("T_入出庫", , adCmdTable)
DoCmd.RunSQL "DELETE * FROM T_入出庫"
While Not objRec.EOF 'テーブルの最後になれば終了
With rst
.AddNew
.Fields("入出庫コード") = objRec.Fields("入出庫コード").Value
.Fields("入出庫") = objRec.Fields("入出庫").Value
.Update
End With
objRec.MoveNext
Wend
終了:
End Sub
'---------------------------------
Public Sub 保管場所()
On Error GoTo 終了
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("T_保管場所")
'T_保管場所
Set objRec = ADO_CN.Execute("T_保管場所", , adCmdTable)
DoCmd.RunSQL "DELETE * FROM T_保管場所"
While Not objRec.EOF 'テーブルの最後になれば終了
With rst
.AddNew
.Fields("保管場所コード") = objRec.Fields("保管場所コード").Value
.Fields("保管場所") = objRec.Fields("保管場所").Value
.Update
End With
objRec.MoveNext
Wend
終了:
End Sub
'---------------------------------
Public Sub 検索クリア()
On Error GoTo 終了
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("T_検索履歴")
'T_検索履歴
Set objRec = ADO_CN.Execute("T_検索履歴", , adCmdTable)
DoCmd.RunSQL "DELETE * FROM T_検索履歴"
While Not objRec.EOF 'テーブルの最後になれば終了
With rst
.AddNew
.Fields("検索履歴") = objRec.Fields("検索履歴").Value
.Update
End With
objRec.MoveNext
Wend
終了:
End Sub
'---------------------------------
Public Sub ログイン履歴()
On Error GoTo 終了
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("T_ログイン履歴")
'T_ログイン履歴
Set objRec = ADO_CN.Execute("T_ログイン履歴", , adCmdTable)
DoCmd.RunSQL "DELETE * FROM T_ログイン履歴"
While Not objRec.EOF 'テーブルの最後になれば終了
With rst
.AddNew
.Fields("社員コード") = objRec.Fields("社員コード").Value
.Fields("日時") = objRec.Fields("日時").Value
.Fields("成功or失敗") = objRec.Fields("成功or失敗").Value
.Fields("IPアドレス") = objRec.Fields("IPアドレス").Value
.Update
End With
objRec.MoveNext
Wend
終了:
End Sub
'---------------------------------
Public Sub 入出庫処理()
On Error GoTo 終了
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("T_入出庫処理")
'T_入出庫処理
Set objRec = ADO_CN.Execute("T_入出庫処理", , adCmdTable)
DoCmd.RunSQL "DELETE * FROM T_入出庫処理"
While Not objRec.EOF 'テーブルの最後になれば終了
With rst
.AddNew
.Fields("日付") = objRec.Fields("日付").Value
.Fields("社員コード") = objRec.Fields("社員コード").Value
.Fields("品目コード") = objRec.Fields("品目コード").Value
.Fields("入出庫コード") = objRec.Fields("入出庫コード").Value
.Fields("数量") = objRec.Fields("数量").Value
.Fields("単位コード") = objRec.Fields("単位コード").Value
.Fields("保管場所コード") = objRec.Fields("保管場所コード").Value
.Fields("削除") = objRec.Fields("削除").Value
.Fields("削除日付") = objRec.Fields("削除日付").Value
.Update
End With
objRec.MoveNext
Wend
終了:
End Sub
'Ver.2.00βより追加
'---------------------------------
Public Sub 各種設定()
On Error GoTo 終了
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("T_各種設定")
'T_各種設定
Set objRec = ADO_CN.Execute("T_各種設定", , adCmdTable)
DoCmd.RunSQL "DELETE * FROM T_各種設定"
While Not objRec.EOF 'テーブルの最後になれば終了
With rst
.AddNew
.Fields("パラメータ") = objRec.Fields("パラメータ").Value
.Fields("設定値") = objRec.Fields("設定値").Value
.Update
End With
objRec.MoveNext
Wend
終了:
End Sub
M_在庫管理
Option Compare Database
Option Explicit
'---------------------------------
'検索履歴をT_検索履歴に記録するサブルーチン
'txt:検索ワード
'---------------------------------
Sub 検索履歴(txt As String)
On Error GoTo 終了
Dim rst As DAO.Recordset
'重複データなら検索履歴として追記しない
If Nz(DLookup("検索履歴", "T_検索履歴", "検索履歴 = '" & txt & "'"), "empty") = "empty" Then
Set rst = CurrentDb.OpenRecordset("T_検索履歴")
With rst
.AddNew
.Fields("検索履歴") = Nz(txt, "")
.Update
End With
rst.Close
Set rst = Nothing
End If
Exit Sub
終了:
Call エラーログ("M_在庫管理", "検索履歴")
End Sub
'---------------------------------
'サブフォームの項目をダブルクリックした時の処理
'strForm:サブフォーム名
'---------------------------------
Public Sub 処理(strForm As Form)
On Error GoTo 終了
Select Case strForm.Parent.Name 'サブフォームの親フォーム名で処理を振り分け
Case "F_安全在庫"
'特になし
Case "F_在庫検索"
'特になし
Case "F_入出庫履歴"
'特になし
Case "F_BOM"
Forms![F_BOM]![cmb_親品目コード].Value = Forms![F_BOM]![SF_BOM]![親品目コード].Value
Forms![F_BOM]![lbl_親品目型式].Caption = Forms![F_BOM]![SF_BOM]![T_品目.品目型式].Value
Forms![F_BOM]![cmb_子品目コード].Value = Forms![F_BOM]![SF_BOM]![品目コード].Value
Forms![F_BOM]![lbl_子品目型式].Caption = Forms![F_BOM]![SF_BOM]![T_品目_1.品目型式].Value
Forms![F_BOM]![txt_数量].Value = Forms![F_BOM]![SF_BOM]![数量].Value
Forms![F_BOM]![cmb_単位].Value = Forms![F_BOM]![SF_BOM]![T_単位.単位コード].Value
Forms![F_BOM]![lbl_単位].Caption = Forms![F_BOM]![SF_BOM]![T_単位.単位].Value
Forms![F_BOM]![cmb_保管場所].Value = Forms![F_BOM]![SF_BOM]![T_保管場所.保管場所コード].Value
Forms![F_BOM]![lbl_保管場所].Caption = Forms![F_BOM]![SF_BOM]![T_保管場所.保管場所].Value
Case "F_入出庫処理"
If Forms![F_入出庫処理]![SF_品目]![削除].Value = True Then
MsgBox "削除された品目です"
GoTo 終了
Else
Forms![F_入出庫処理]![cmb_品目].Value = Forms![F_入出庫処理]![SF_品目]![品目コード].Value
Forms![F_入出庫処理]![lbl_品目].Caption = Forms![F_入出庫処理]![SF_品目]![品目型式].Value
Forms![F_入出庫処理]![cmb_品目].BackColor = vbWhite
Forms![F_入出庫処理]![txt_数量].SetFocus
End If
End Select
Exit Sub
終了:
Call エラーログ("M_在庫管理", "ReadDatabase")
End Sub
'---------------------------------
'テーブルからの読み込み
'引数1 : strTable : テーブル
'引数2 : strField : 項目
'返り値 : フィールドの値(文字列)
'---------------------------------
Public Function ReadDatabase(ByVal strTable As String, ByVal strField1 As String, ByVal strParameter As String, ByVal strField2 As String) As String
On Error GoTo 終了
Dim sql As String
Dim rst As DAO.Recordset
sql = "SELECT * FROM " & strTable & " WHERE " & strField1 & "= '" & strParameter & "'"
Set rst = CurrentDb.OpenRecordset(sql)
ReadDatabase = Nz(rst.Fields(strField2), "")
rst.Close
Set rst = Nothing
Exit Function
終了:
Call エラーログ("M_在庫管理", "ReadDatabase")
End Function
'---------------------------------
'テーブルの最終行のフィールド名のデータを取得する
'strTable=テーブル名
'strFiele=フィールド名
'---------------------------------
Public Function GetDatabaeLast(ByVal strTable As String, ByVal strField As String) As String
On Error GoTo 終了
Dim sql As String
Dim rst As DAO.Recordset
If IsNull(strTable) Or IsNull(strField) Then
GetDatabaeLast = ""
Exit Function
End If
sql = "SELECT * FROM " & strTable
Set rst = CurrentDb.OpenRecordset(sql)
rst.MoveLast
GetDatabaeLast = Nz(rst.Fields(strField), "")
rst.Close
Set rst = Nothing
Exit Function
終了:
Call エラーログ("M_在庫管理", "GetDatabaeLast")
End Function
'---------------------------------
' Excelからのインポート
'---------------------------------
Public Sub ImportFromExcel(strTable As String)
On Error GoTo 終了
If strFileName = "" Then strFileName = "在庫管理システム・元データ"
Dim str範囲 As String
Dim strTable2 As String
Dim rst As DAO.Recordset
strTable2 = "T_" & strTable
Set rst = CurrentDb.OpenRecordset(strTable2)
str範囲 = strTable & "!B1:K65535"
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, strTable2, strFileName, True, str範囲
MsgBox "インポートしました"
rst.Close
Set rst = Nothing
Exit Sub
終了:
Call エラーログ("M_在庫管理", "ImportFromExcel")
If Err.Number = 3011 Then
MsgBox "ファイルが見つかりませんでした。" & vbCr & "ファイルはマイドキュメントにおいてください。"
Else
MsgBox "インポートできませんでした"
Debug.Print Err.Number
End If
End Sub
'---------------------------------
Public Sub 並び替え(ByVal subForm As Control, ByVal strField As String)
subForm.Form.OrderBy = strField '並べ替えの基準とするフィールドを設定
subForm.Requery
End Sub
'---------------------------------
Public Sub エラーログ(ByVal m As String, ByVal p As String)
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("T_エラーログ")
With rst
.AddNew
.Fields("日時") = Now
.Fields("エラー番号") = Err.Number
.Fields("エラーメッセージ") = Err.Description
.Fields("エラーモジュール") = m
.Fields("エラープロシージャ") = p
.Update
.Close
End With
Set rst = Nothing
End Sub