最近、のどが痛くて風邪かしら? どうもoReです。
在庫管理って、在庫数が正確なのと同じくらい
入出庫履歴も大事なのかしら…
と言うわけで
いつ、誰が、何を、何個、入出庫したか?
入出庫履歴を作成していきます。
入出庫履歴シート作成
まずは、入出庫履歴シートを作成します。
こんな感じで作成しました。
※シート名を『入出庫履歴』にするのを忘れずに
入出庫した際に、入出庫履歴シートの各項目に
データを自動で入力させていきます。
TextBox 追加
・誰が入出庫したのか
・何個入出庫するのか
入力できるように、在庫管理用ユーザーフォームにテキストボックスを
追加します。
わかりやすいように、上から
・TextBox1 入出庫者名(誰が)
・TextBox2 バーコードデータ(何を)
・TextBox3 個数(何個)
というように配置します。
前回作成した在庫管理入出庫プログラムでは、TextBox1がバーコードデータだったので、
在庫管理入出庫プログラムの検索対象部分をTextBox2へ変更しましょう。
出庫処理/入庫処理
Set Knskcell = Range("C:C").Find(what:= TextBox2,lookat:= xlWhole)
また、出庫-1・入庫+1処理するところをTextBox3へ変更しましょう。
出庫処理
Knskcell.Offset(0,4) = Knskcell.Offset(0,4) - TextBox3
入庫処理
Knskcell.Offset(0,4) = Knskcell.Offset(0,4) + TextBox3
TextBox 未入力処理
まずは、どうゆう動作をさせるかを考えましょう。
条件として
こんな感じですかね。
では、オレグラミングしていきましょう(笑)
①入出庫者名を入力させる
・入出庫者名を入力していなければと言うことは
テキストボックス1が空白だった場合
If TextBox1 = "" Then
②バーコードデータを入力させる
・バーコードデータを入力していなければと言うことは
テキストボックス2が空白だった場合
If TextBox2 = "" Then
③個数を入力させる
・個数を入力していなければと言うことは
テキストボックス3が空白だった場合
If TextBox3 = "" Then
合体させると
If TextBox1 = "" Then 入出庫者名 未入力の実行プログラム ElseIf TextBox2 = "" Then バーコードデータ 未入力の実行プログラム ElseIf TextBox3 = "" Then 個数 未入力の実行プログラム Else どれも入力済の実行プログラム End If
となるので、どれも入力済の実行プログラムのところに
前回作成した在庫管理入出庫プログラムを入れていきます。
また、各テキストボックスの未入力の実行プログラムのところに
メッセージを出します。
・入出庫者名を入力してください。
・バーコードデータを入力してください。
・個数を入力してください。
Private Sub CommandButton1_Click()
Dim Knskcell As Range
If TextBox1 = "" Then
MsgBox "入出庫者名を入力してください。"
ElseIf TextBox2 = "" Then
MsgBox "バーコードデータを入力してください。"
ElseIf TextBox3 = "" Then
MsgBox "個数を入力してください。"
Else
Set Knskcell = Range(“C:C”).Find(what:= TextBox2, lookat:= xlWhole)
If Knskcell Is Nothing Then
MsgBox “部品が登録されていません。”
ElseIf Knskcell = "" Then
MsgBox “部品が登録されていません。”
Else
Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) - TextBox3
End If
End If
End Sub
このようにしました。
動作確認してみてください。
ちゃんと動いてますか?
入出庫履歴シートへ入力(出力かな?)
入出庫した部品のデータ等を、入出庫履歴シートへ
VBAプログラムを使って自動で出力していきます。
先程作成した入出庫履歴シートを見ると
2行目が項目になってます。
という事は、3行目以降に入出庫したデータ等を
出力していかなければなりませんね?
Range(“B3”) = 日時
Range(“C3”) = 入出庫者
このように書きますか?
はい! これではだめですよね。
1回目の入出庫はうまくいきますが、2回目の入出庫の時
また同じ3行目に入出庫データが出力されてしまいます。
これは入出庫履歴ではなくて、最後に入出庫した部品データです。
やり方は色々ありますが、とりあえずこう書きましょう。
Private Sub CommandButton1_Click()
Dim Knskcell As Range
If TextBox1 = "" Then
MsgBox "入出庫者名を入力してください。"
ElseIf TextBox2 = "" Then
MsgBox "バーコードデータを入力してください。"
ElseIf TextBox3 = "" Then
MsgBox "個数を入力してください。"
Else
Set Knskcell = Range(“C:C”).Find(what:=TextBox2, lookat:=xlWhole)
If Knskcell Is Nothing Then
MsgBox “部品が登録されていません。”
ElseIf Knskcell = "" Then
MsgBox “部品が登録されていません。”
Else
Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) - TextBox3
Worksheets("入出庫履歴").Cells(Rows.Count,2).End(xlUp).Offset(1,0) = Now
Worksheets("入出庫履歴").Cells(Rows.Count,3).End(xlUp).Offset(1,0) = TextBox1
Worksheets("入出庫履歴").Cells(Rows.Count,4).End(xlUp).Offset(1,0) = Knskcell.Offset(0, -1)
Worksheets("入出庫履歴").Cells(Rows.Count,5).End(xlUp).Offset(1,0) = Knskcell.Offset(0, 1)
Worksheets("入出庫履歴").Cells(Rows.Count,6).End(xlUp).Offset(1,0) = Knskcell.Offset(0, 2)
Worksheets("入出庫履歴").Cells(Rows.Count,7).End(xlUp).Offset(1,0) = Knskcell.Offset(0, 3)
Worksheets("入出庫履歴").Cells(Rows.Count,8).End(xlUp).Offset(1,0) = TextBox3*1
Worksheets("入出庫履歴").Cells(Rows.Count,9).End(xlUp).Offset(1,0) = "出庫"
End If
End If
End Sub
入庫処理
・マイナスをプラスに変更
Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) + TextBox3
・出庫を入庫に変更
Worksheets("入出庫履歴").Cells(Rows.Count,9).End(xlUp).Offset(1,0) = "入庫"
動作確認してみてください。
入出庫履歴にちゃんと自動で出力されてますか?
まとめ
次回 入出庫履歴プログラムの説明などなど
コメント