#11 合計金額の集計表示

購入したすべての商品の合計金額は、これまでも自動的に計算・表示されるようになっています。
合計金額の表示結果

ただし、今回注意しなければならないのは、その集計表示のタイミングです。

Accessの仕様として、レコード(ここでは商品ごとのレコード)に対して保存操作が行われたときにはじめて、そこで入力された値が確定します。見た目には計算可能な状態ではあっても、編集中のレコードが確定するまでは、複数レコード間を通しての合計値などの計算は行われません。

レコードの保存操作には、
  • レコードセレクタのクリック
  • Shift+Enterキーの入力
  • TabキーやEnterキーによる他のレコードへの移動
  • メニューやツールバーの操作
などがあります。しかし次々と商品のバーコードを読み取っていき、最後の商品の購入数量が「1」ならば、カーソルが「数量」のテキストボックス上にある状態ですべてのバーコード読み取り作業が完了することになります。当然その時点では、Enterキーなどによって次レコードにカレントレコードを進めない限り、最新の集計結果は表示されません。

そこでここでは、すべての商品の入力が完了したことを知らせるため、その時点で『ファンクションキーを押してもらう』という仕様にすることにします。

次のようなコードをフォーム「frm売上伝票入力_sub」のモジュールに追加します。これによってファンクションキー「F3」を押すことでカレントレコードが強制的に保存され、それに連動して「合計金額」が再計算されます。ファクションキーは基本的には何でもよいのですが、Accessの機能がすでに割り当てられているキーは動作が不確実なため、それ以外のファンクションキーを割り当てるようにします。また、実際にはこのファンクションキーが画面上のどこにカーソルがある状態で押されるか分からないのですが、Accessの性質上、メインフォーム上のコントロールにフォーカスがある状態ではすでにサブフォームのレコードは必ず保存されているので、ここではメインフォームではなくサブフォームにコードを書くことで機能を満たすことができます。なおこのプログラムの動作には、#10でも説明した「キーイベント取得」プロパティが"はい"になっていることが前提となります。

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'フォームのキークリック時

  If KeyCode = vbKeyF3 Then
    '[F3]キーが押されたとき
    '編集中のレコードを強制的に書き込む
    DoCmd.RunCommand acCmdSaveRecord
  End If

  (以下は#10と同様)

End Sub

商品コード入力直後の状態(合計は未計算)
商品コード入力直後の状態

ファンクションキーを押した後の状態(レコードが保存され合計が再計算されています)
ファンクションキーを押した後の状態
| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved