このエントリーをはてなブックマークに追加

業者と日付ごとに、ページ番号を採番する。

こちらは、Accessで作成した、データ入力用のサンプルフォームです。フォーム詳細セクションの最下部にテキストボックスを配置して、ページ番号を表示させています。今回は、業者コードと日付ごとにひとまとまりとして、ページ番号を振っていくようにします。

例えば、毎月送られてくる運送会社からの請求書をもとに、データ入力をしていくような場合、請求書が複数ページに渡っている場合は、請求書と同じように、フォームにもページ番号を振っていきます。ページ毎の小計金額が記載されている場合、ページごとに入力内容が合っているかを確かめるのにもとても便利です。

フォーム

クエリの作成

では、ページ番号を採るためにまず選択クエリを作成します。テーブル[T_main]には、[ID]、[日付]、[業者ID]、[ページ]の4つのフィールドがあります。作成する選択クエリには、すべてのフィールドを追加しますが、[日付]と[業者ID]フィールドに抽出条件を指定します。

この2つのフィールドの抽出条件には、開いている入力フォームのカレントレコードの値が指定されるようにします。この例の場合ですと、「2018年3月1日」の業者コード「001」のデータのみが選択クエリに抽出されることになります。ですので、このグループの中で、ページ番号を付けていくことができるということになります。クエリ名は、Q_page、フォーム名はF_mainとしています。

日付フィールドの抽出条件([txt日付]は、テキストボックス名)

[Forms]![F_main]![txt日付]

業者IDフィールドの抽出条件([業者ID]は、テキストボックス名)

[Forms]![F_main]![業者ID]

ページ番号を取得するコードの記述

入力フォームをデザインビューで開きます。ページ番号を取得するタイミングですが、今回は、メインフォームで業者IDと日付を入力したあと、明細フォームの[sub]フォームにカーソルが移ったときに、ページ番号を採るようにしていきます。

ちなみに、テキストボックス[txt日付]のカーソル喪失後イベントには、[sub]フォームの[担当入力]ボタンにカーソルが移動するようにコードを記述しています。

Private Sub txt日付_LostFocus()

Me.sub.SetFocus
Me.sub.Form.cmd担当.SetFocus

End Sub

フォームデザイン

[sub]フォームのフォーカス取得時イベントにコードを書きます。

Private Sub sub_Enter()
Dim pCnt As Integer
pCnt = DCount("*", "Q_page")
If IsNull(Me.テキスト3) Then
    If pCnt = 1 Then
        Me.テキスト3 = 1
    ElseIf pCnt >= 2 Then
        Me.テキスト3 = DMax("ページ", "Q_page") + 1
    Else
    End If
End If
End Sub
  1. “Q_page”クエリで抽出したレコードの数を格納する変数pCntをInteger型で宣言します。
  2. DCount関数で、”Q_page”クエリのレコード数を取得して、変数pCntに入れます。
  3. [テキスト3](ページ番号を表示するテキストボックス名)がNull値のとき、さらに、変数pCntの値(”Q_page”のレコード数)が「1件」だったら、[テキスト3]に「1」を代入します。
  4. 変数pCntの値(”Q_page”のレコード数)が「2件以上」のときは、DMax関数で取得した、ページ番号の最大に「+1」を加えた数を[テキスト3]に代入します。
  5. “Q_page”のレコード数が1件といういことは、今入力しているレコード1件だけということになり、このページが初めてのページであることを意味しているので、ページ番号は「1」となります。

既存の業者コードまたは、日付を変更したときの対応

ここまでで、ページ番号を取得することはできましたが、ここで、既存のレコードの業者コードや日付を訂正したときを想定してみます。例えば、業者コード「002」の「2018年4月5日」の1ページ目の日付を「2018年4月2日」に変更したとします。

フォーム

すると、ページ番号は変更されないので、もしすでに、企業コード「002」の「2018年4月2日」に1ページが存在していたら、1ページが2つできてしまうことになります。(クエリQ_pageで確認しています。)

クエリ

そこで、このようになる事態を避けるためにページを表示するテキストボックス[テキスト3]がNull値のとき以外に、[業者ID]または、[txt日付]が更新されたときは、[テキスト3]にNull値を代入するようにします。そして、カーソルが[sub]フォームに移った時に、新たにページ番号を採るようにします。

[業者ID]の更新後処理イベントにコードを書きます。

Private Sub 業者ID_AfterUpdate()
IF IsNull(Me.テキスト3) Then
Else
    Me.テキスト3 = Null
  Me.txt日付.SetFocus
End If
End Sub

[txt日付]の更新後処理イベントにコードを書きます。

Private Sub txt日付_AfterUpdate()
IF IsNull(Me.テキスト3) Then
Else
    Me.テキスト3 = Null
End If
End Sub

これで、日付を変更して、明細フォーム[sub]にカーソルがいくと、新たにページ番号「6」を取得することができます。

フォーム

クエリQ_pageで確認しても、ページ番号を「6」で取得することができています。

クエリ

※業者IDを変更したときも同様の処理となります。

このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントフィード

トラックバックURL : http://gyoumuka.work/wp-trackback.php?p=2989

PAGE TOPへ戻る