これまでワークシートイベントを記述してきました。
次にワークシートに配置されたボタンについてmoduleにプログラムを書いていきます。
初めに「登録」ボタンの動作について記述していきます。
上部に配置された青色のボタン群は「メニュー」>「挿入」から「図形」と「テキスト」を使用して作成しました。
作成したボタンを右クリックして「マクロの登録」を選択、作成したマクロ名を選択して「OK」して連結します。連結するためのマクロ(プロジャー)を先に作成します。
「登録」ボタン全体像
登録時の動作
1. 未入力項目の処理(発注日、仕入先名称、商品名、数量、納期欄の空白を確認します。)
2. 希望納期の適正確認(曜日の確認、当日納期)
3. 発注予定リストに登録する行の取得(R5セルの空白を確認で新規、編集を判断)
4. 発注予定リストにデータ登録
5. 入力欄の消去
「登録」ボタンのmodule全体
Application.EnableEvents = False
On Error GoTo jump3
‘登録日空の処理
If Cells(5, 5).Value = “” Then
Cells(5, 5).Value = Mid(Date, 1, 4) & Mid(Date, 6, 2) & Mid(Date, 9, 2)
End If
‘仕入先名称、商品名、数量欄空白時の処理
If Cells(5, 7).Value = “” Or Cells(5, 9).Value = “” Or Cells(5, 10).Value = “” Then
MsgBox (“未入力の項目があります。”)
GoTo jump3
End If
‘単価空白、金額0の確認
If Cells(5, 13).Value = “” Or Cells(5, 14).Value = 0 Then
res = MsgBox(“金額が0です処理を続けますか?”, vbYesNo)
If res = vbNo Then
GoTo jump3
End If
End If
‘希望納期の適正確認
Dim Dd As String
Dim Dt As Date
Dd = Cells(5, 15).Value
Dt = Mid(Dd, 1, 4) & “/” & Mid(Dd, 5, 2) & “/” & Mid(Dd, 7, 2)
If Weekday(Dt) = 1 Or Weekday(Dt) = 7 Then
res = MsgBox(“納期が土日です処理を続けますか?”, vbYesNo)
If res = vbNo Then
GoTo jump3
End If
End If
If Dt <= Date Then
res = MsgBox(“納期が今日以前です処理を続けますか?”, vbYesNo)
If res = vbNo Then
GoTo jump3
End If
End If
‘登録行の確認
If Cells(5, 18).Value = “” Then
‘新規
‘発注予定リスト行の挿入
Range(“E7:R7”).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
‘データ登録
Cells(5, 17).Value = “発注予約”
For k = 5 To 17
Cells(7, k).Value = Cells(5, k).Value
Next
Else
‘修正行の上書き
h = Cells(5, 18).Value
For k = 5 To 17
Cells(h, k).Value = Cells(5, k).Value
Next
End If
MsgBox (“登録されました。”)
ActiveSheet.Range(“E5:R5”).Select
Selection.ClearContents
Range(“E5”).Select
jump3:
Application.EnableEvents = True
End Sub
一節ずつ解説していきます。
module1の準備
ワークシートの中で「Alt」+「F11」(端末によって「Fn」キーも同時に押してください)でVBE画面が開きます。
1. メニュー「挿入」から標準モジュールをクリックしてmodule1を作成します。
2. 右上の欄に「Sub Reg_07」と入力してEnterを押します。
Reg_07はmoduleの名称です、名称は変更可能です。
3. ()とEnd Subが自動的に入力されます。
4. 後ほどボタンと名称を連結します。
「登録」ボタン詳細
入力されていない項目の確認
On Error GoTo jump3は、それ以下の処理にERRORが発生した場合にjump3まで処理を飛ばします。
手入力した内容の確認をしていくとき、想定外の入力などでERRORが発生する可能性があるためです。
‘登録日空白時の処理
If Cells(5, 5).Value = “” Then
Cells(5, 5).Value = Mid(Date, 1, 4) & Mid(Date, 6, 2) & Mid(Date, 9, 2)
End If
Mid(Date・・)の説明は仕入管理4“日付の取得”を参照してください。
‘仕入先名称、商品名、数量の空白の確認
If Cells(5, 7).Value = “” Or Cells(5, 9).Value = “” Or Cells(5, 10).Value = “” Then
MsgBox (“未入力の項目があります。”)
GoTo jump3
End If
‘単価空白、金額0の確認
If Cells(5, 13).Value = “” Or Cells(5, 14).Value = 0 Then
res = MsgBox(“金額が0です処理を続けますか?”, vbYesNo)
If res = vbNo Then
GoTo jump3
End If
End If
MsgBox(“金額が0です処理を続けますか?”, vbYesNo)でメッセージボックスが表示され“はい”または“いいえ”の選択を促します。
選択の結果を変数resに代入し、”はい”の選択の場合res = vbyesとなりプログラムは下に流れます。
“いいえ”の選択の場合res = vbNoとなりjump3まで処理を飛ばします。
希望納期の適正確認
‘希望納期の適正確認
Dim Dd As String
Dim Dt As Date
Dd = Cells(5, 15).Value
Dt = Mid(Dd, 1, 4) & “/” & Mid(Dd, 5, 2) & “/” & Mid(Dd, 7, 2)
曜日を判定するためO5セル納期に入っている文字を日付形式に戻しています。
本システムでは日付をすべて文字列としています。必要に応じて日付形式に戻しています。
If Weekday(Dt) = 1 Or Weekday(Dt) = 7 Then
res = MsgBox(“納期が土日です処理を続けますか?”, vbYesNo)
If res = vbNo Then
GoTo jump3
End If
End If
MsgBox(“納期が土日です処理を続けますか?”, vbYesNo)でメッセージボックスが表示され”はい”または”いいえ”の選択を促します。
選択の結果を変数resに代入し結果”はい”の選択の場合res = vbyesとなりプログラムは下に流れます。
“いいえ”の選択の場合res = vbNoとなりjump3まで処理を飛ばします。
If Dt <= Date Then
res = MsgBox(“納期が今日以前です処理を続けますか?”, vbYesNo)
If res = vbNo Then
GoTo jump3
End If
End If
MsgBox(“納期が今日以前です処理を続けますか?”, vbYesNo)でメッセージボックスが表示され”はい”または”いいえ”の選択を促します。
選択の結果を変数resに代入し結果”はい”の選択の場合res = vbyesとなりプログラムは下に流れます。
“いいえ”の選択の場合res = vbNoとなりjump3まで処理を飛ばします。
発注リストに登録する行の取得
‘登録行の確認
If Cells(5, 18).Value = “” Then
‘新規
(省略)
Else
‘修正行の上書き
(省略)
End if
データ登録 ’新規
‘発注予定リスト行の挿入
Range(“E7:R7”).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
‘データ登録
Cells(5, 17).Value = “発注予約”
For k = 5 To 17
Cells(7, k).Value = Cells(5, k).Value
Next
Range(“E7:R7”).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
データ登録 ’修正行の上書き
h = Cells(5, 18).Value
For k = 5 To 17
Cells(h, k).Value = Cells(5, k).Value
Next
入力欄消去
MsgBox (“登録されました。”)
ActiveSheet.Range(“E5:R5”).Select
Selection.ClearContents
Range(“E5”).Select
jump3:
Application.EnableEvents = True
End Sub
ActiveSheet.Range(“E5:R5”).Select
Selection.ClearContents で入力欄を消去します。
カーソルをE5セルにセットします。
jump3:は途中に何度か出てくるGoTo jump3のジャンプ先です。
そして終了時には必ずApplication.EnableEvents = Trueを記述してもとに戻します。
Application.EnableEvents = True以前にエラーで処理が止まると、Application.EnableEvents = FalseのままとなりVBAによる反応がしなくなります。
その場合は保存終了後、再度起動してください。
VBAシステム(仕入管理5)moduleでは登録用のmoduleを作成しました。
作成したmoduleとワークシート上のボタンを連結方法を紹介した後、VBAシステム(仕入管理6)moduleでは呼出、クリア、削除、注文書ボタンを作成していきます。
moduleとワークシート上のボタンを連結
上部に配置された青色のボタン群は「メニュー」>「挿入」から「図形」と「テキスト」を使用して作成しました。 上の図は、作成したボタンを右クリックして「マクロの登録」を選択、作成したプログラム名(Reg_07)を選択して「OK」して連結した様子です。