軽減税率とそれ以外の売上の表記について② コードの解説

Pocket

前回の記事のコードの解説です。

Private Sub 売上数量_AfterUpdate()

Me.Refresh →更新後のデータで集計をするので、一度クエリを実行し、最新の状態にします。

Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset

Dim cnn1 As ADODB.Connection
Dim rs1 As ADODB.Recordset

Set cnn = CurrentProject.Connection
Set rs = New ADODB.Recordset

Set cnn1 = CurrentProject.Connection
Set rs1 = New ADODB.Recordset
この辺はお決まりのコードです。定型文だと思ってください。

rs.Open “Q納品明細”, cnn, adOpenKeyset, adLockOptimistic
rs1.Open “T納品書”, cnn1, adOpenKeyset, adLockOptimistic
〇今回は二つのテーブル(クエリ)を操作します。
ひとつはQ納品明細です。これは集計の対象です。
もう一つはT納品書。T納品書のフィールドに売上と消費税を
集計します。

Dim a As Long
a = 0
Dim b As Long
b = 0
Dim c As Long
c = 0
Dim d As Long
d = 0
〇各フィールドに入れる値を最初は変数として定義します。

rs.MoveFirst
〇Q納品明細の一番最初のレコードに移動します。

Do Until rs.EOF 
〇Q納品明細の最初から最後までレコードを移動させます。

If rs!納品書NO = Me!納品書NO Then
〇Q納品明細において、納品書NOが今開いている納品書NOを探します。
If rs!軽減税率 = 0 Then
〇軽減税率にチェックが入っていないレコードを探します。
a = a + rs!売上金額
b = b + rs!消費税
End If
〇見つかったら、売上金額と消費税を足します。一番最初は
aの値は0なので、それに売上を足し、次該当するレコードが
あったときは、その売上に更に売上を足します。
消費税についても同様です。

If rs!軽減税率 = -1 Then
c = c + rs!売上金額
d = d + rs!消費税
End If
End If
〇上のIF関数と同様です。違いは軽減税率にチェックが入っているレコードで検索します。

rs.MoveNext 
〇自動では次のレコードに移動しないので、このコードで次のレコードに移動します。

Loop

〇変数での集計が終わったら、フィールドに変数の値を代入します。最初に今開いているフォームの納品書NOをT納品書から探します。
rs1.Find “納品書NO=” & Me!納品書NO & “”
〇後は値を代入します。
rs1!対象外売上 = a
rs1!消費税 = b
rs1!軽減売上 = c
rs1!軽減消費税 = d
rs1.Update

以下は定型文です。
rs.Close
Set rs = Nothing
cnn.Close
Set cnn = Nothing

rs1.Close
Set rs1 = Nothing
cnn1.Close
Set cnn1 = Nothing

End Sub

こんな感じでDLookupやDSum関数を使わずに集計します。
関数を使うと、開いた瞬間一瞬の間があります。それが気になるようであれば
一工夫が必要になります。
ほんの一瞬ですが、気になる気持ちはよくわかります。
(作る側からするとそれくらいいいじゃんと思いますが。。)
=======-===============================
消費税が上がって一月が経ちました。特に問題が起こることもなく安堵しております。

本日も最後までお読みいただきありがとうございます。