これまでワークシートイベントを記述してきました。
次にワークシートに配置されたボタンについてmoduleにプログラムを書いていきます。
初めに「登録」ボタンの動作について記述していきます。
ワークシート上部に配置された青色のボタン群は「メニュー」>「挿入」から「図形」と「テキスト」を使用して作成しました。
作成したボタンを右クリックして「マクロの登録」を選択、作成したマクロ名を選択して「OK」して連結します。連結するためのマクロ(プロジャー)を先に作成します。
準備
ボタンの準備
上部に配置された青色のボタン群は「メニュー」>「挿入」から「図形」と「テキスト」を使用して作成しました。
moduleの準備
moduleをどこに書き込むかわからない方は、VBAプログラム module1、あるいは VBA 仕入管理5のmoduleの準備をご参照ください。
moduleとボタンを連結
作成したmoduleはボタンと連結する必要があります。詳細はVBA 仕入管理5のmoduleとワークシート上のボタンを連結をご参照ください。
登録ボタンの全体像
登録ボタンの動作
登録ボタンの役割は、入力欄にあるデータをF13セル以降に転記することです。
使用者は次に「発行」ボタンで帳票印刷したのち、「清算完了」ボタンを押すことで経費実績として記録されます。
moduleの全体
Sub AcReg_03() ‘登録ボタン
If Cells(9, 5).Value <> “作成” Then
MsgBox (“清算完了処理を行ってください。”)
Exit Sub
End If
If Cells(9, 7).Value = “” Then
MsgBox (“申請者名がありません。”)
Exit Sub
End If
If Not IsNumeric(Cells(6, 10).Value) Then
MsgBox (“金額が不適切です。”)
Exit Sub
End If
Application.EnableEvents = False
On Error GoTo jump1
If Cells(6, 5).Value = “” Then ‘IDが空の時に新規登録
Paste1 ‘新規
Else
Paste2 ‘修正
End If
Clr_01 ‘入力欄消去
MsgBox (“登録されました。”)
jump1:
Application.EnableEvents = True
登録ボタンの詳細
一説ずつ解説していきます。
入力内容の確認
入力内容の確認は、入力データとして最低限守る必要のあるルールをプログラムでチェックします。
If Cells(9, 5).Value <> “作成” Then
MsgBox (“清算完了処理を行ってください。”)
Exit Sub
End If
次に「発行」ボタンを押すと“発行済”になり、「清算完了」を押すと“作成”に戻ります。
メッセージ”清算完了処理を行ってください。”を出してお知らせしています。
If Cells(9, 7).Value = “” Then
MsgBox (“申請者名がありません。”)
Exit Sub
End If
If Not IsNumeric(Cells(6, 10).Value) Then
MsgBox (“金額が不適切です。”)
Exit Sub
End If
転記前の準備
Application.EnableEvents = False
On Error GoTo jump1
転記
If Cells(6, 5).Value = “” Then ‘IDが空の時に新規登録
Paste1 ‘新規
Else
Paste2 ‘修正
End If
E6セル 空欄でない場合、修正入力と判断しプロジャー名Paste2を呼び出します。
Paste1 Paste2は後ほど解説します。
転記後の処理
Clr_01 ‘入力欄消去
Clr_01は後ほど解説します。
MsgBox (“登録されました。”)
jump1:
Application.EnableEvents = True
Paste1
Paste1は新規登録です。処理の流れは初めにID番号を作成し、次に収入か支出を判断して転記をします。
転記後に集計のためプロジャーCalc1を呼び出しします。
Paste1_moduleの全体
Sub Paste1() ‘新規登録
‘ID番号の作成
Dim mv1 As Long
Dim mv2 As Long
Set DTH(2) = Worksheets(“管理番号”).Range(“A1”)
mv1 = DTH(2).Cells(2, 1)
mv2 = mv1 + 1
DTH(2).Cells(2, 1) = mv2
Select Case Cells(6, 12) ‘支出、収入区分
Case “支出”
For h = 13 To 37
If Cells(h, 5) = “” Then
Cells(h, 5) = mv2
For k = 6 To 11
Cells(h, k) = Cells(6, k)
Next
GoTo jump1
End If
Next
MsgBox (“支出欄がいっぱいです。”)
Case “収入”
For h = 41 To 45
If Cells(h, 5) = “” Then
Cells(h, 5) = mv2
For k = 6 To 11
Cells(h, k) = Cells(6, k)
Next
GoTo jump1
End If
MsgBox (“収入欄がいっぱいです。”)
End Select
jump1:
Calc1
End Sub
Paste1の詳細
一説ずつ解説を進めます。
管理番号
‘ID番号の作成
Dim mv1 As Long
Dim mv2 As Long
Set DTH(2) = Worksheets(“管理番号”).Range(“A1”)
mv1 = DTH(2).Cells(2, 1)
mv2 = mv1 + 1
DTH(2).Cells(2, 1) = mv2
「記録」ボタンを押すたびに1がプラスされ、ID番号として使用し、再び記録されます。
ワークシート「管理番号」
その際に、1000000000のように頭を1とし、桁数は想定より余裕を持つことが必要です。
B2,C2,D2セルの値は、のちほど経費実績記録で使用します。
支出と収入
Select Case Cells(6, 12) ‘支出、収入区分
Case “支出”
<中略>
Case “収入”
<中略>
End Select
支出の転記
For h = 13 To 37
If Cells(h, 5) = “” Then
Cells(h, 5) = mv2
For k = 6 To 11
Cells(h, k) = Cells(6, k)
Next
GoTo jump1
End If
Next
MsgBox (“支出欄がいっぱいです。”)
mv2(ID番号)を空白行のE列に転記します。
以下、入力欄のデータを空白行の同じ列に転記しています。
転記が終了するとGoTo jump1で jump1まで処理をジャンプします。
13 行目から 37行目まで空白欄が無い場合、For Nextを抜けて確認メッセージを出して知らせます。
帳票印刷して、清算完了することで、13 行目以下は空白となります。
収入の転記
For h = 41 To 45
If Cells(h, 5) = “” Then
Cells(h, 5) = mv2
For k = 6 To 11
Cells(h, k) = Cells(6, k)
Next
GoTo jump1
End If
Next
MsgBox (“収入欄がいっぱいです。”)
jump1:
Calc1
経費管理5はここまでです。Paste2(修正)、Calc1(集計)は経費管理6で解説いたします。