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

フォームの明細番号を自動で採番する。

Access2010バージョンを使って、入力用フォームの明細番号を自動的に振っていけるようにカスタムをしていきたいと思います。明細番号を振っていく方法としては、まず、大きく分けてふたつあります。

  1. オートナンバー型で自動採番
  2. 数値型で任意の番号を振る

この二つの型はテーブルのフィールドデータ型に当たります。一番目のオートナンバー型、これは、Accessがレコードごとに、自動的に連番を振ってくれますので、とても便利な機能です。ただ、このオートナンバー型は、レコードを削除した場合、そのとき付けられたナンバーも無くなってしまい、次にレコードができたときは、ナンバーも次の番号が振られてしまいます。

つまり、削除されたレコードがあるとその部分の番号が飛んでしまうということになるのです。明細番号は極力連番にしたい、明細番号に欠番ができてしまうのはあまり好まない、といった場合は、ちょっと不憫なところでもあります。

二番目は、明細番号を任意の番号から始めたい、などといった場合です。オートナンバー型では、番号が”1″から順番に振られていきますが、場合によっては任意の番号、例えば明細番号は6桁にして、頭の数字はたとえば2017年ですと、17にして、”170001″から始めたい、などといった場合です。

ということで、今回は数値型のフィールド使って、フォーム上の明細番号に自動連番を振っていく機能を加えていきたいと思います。まずは、作成していくうえでの大まかな流れです。

  1. フォームにひとつテキストボックスを付け加えて「DMax関数」で明細番号の最大値を取得する。
  2. 次のレコードに移ったとき、例えば始めに入力するテキストボックス「日付」にカーソルをセットする
  3. そのテキストボックス「日付」からカーソルが離れたときに、テキストボックス「明細番号」に「”DMax関数”で取得した値に”1″をプラスした値」を入力する
  4. テキストボックス「明細番号」に「txt明細番号L」に”1″をプラスした値を入れるのは、「txt明細番号」の値がNullの時
    だけにする。

では、順番に作っていきます。

“DMax関数”で明細番号の最大値を取得する

こちらのサンプル「売上フォーム」のレコードソースには、テーブル「T_売上main」が設定されています。まずは、フォームにテキストボックスをひとつ追加します。ここに式ビルダーを使って、「DMax関数」を記入します。引数はテーブル「T_売上main」の「明細番号」フィールドです。

accessフォームまず、この「売上フォーム」をデザインビューで開きます。この非連結のテキストボックス「txt明細番号L」にカーソルを合わせて、プロパティシートの「コントロールソース」の一番右端にある、「ビルドボタン」をクリックします。

 

デザインフォーム

すると、「式ビルダー」ボックスが出ますので、関数を記入していきます。式ビルダーでは入力支援機能をうまく使いながら、記述していきます。

Access式ビルダー
式ビルダーには、DMax(“[明細番号]”,”[T_売上main]”)と記述します。ここでのポイントは、引数の[明細番号][T_売上main]は、それぞれ“ダブルコーテーション”で括ることです。記述ができたら、「OK」ボタンを押します。

Access式ビルダーでは、売上フォームを「フォームビュー」で開けます。テキストボックスに「明細番号の最大値」が表示されています。

Accessフォーム

テキストボックス「日付」にカーソルをセットする

「売上入力」データのひとつのレコードの入力が済んで次のレコード(次の明細番号)に移るために、「Next」ボタンにVBAでイベントプロシージャを記述します。

AccessフォームNextボタン「btnNext」のクリック時イベント

これで、Nextボタンを押すと次のレコードに移動します。更に、次のレコードに移動したあとに、テキストボックス「日付」にカーソルを合わせるようにします。

テキストボックス「日付」からカーソルが離れたときに、”DMax関数”で取得した値に”1″をプラスした値」を入力する

まず、売上フォームをデザインビューで開いて、「txt日付」にカーソルを合わせます。プロパティシートの「イベント」タブを選択して、「フォーカス喪失後イベント」にVBAを記述します。

フォームデザインビュー「txt日付」のフォーカス喪失後イベント

これで、テキストボックス「日付」に日付を入力して、そのあとカーソルが離れたときに、テキストボックス「明細番号」に前のレコードの明細番号に「1」をプラスした番号が自動的に入るようになります。

売上フォーム

 

「txt明細番号」に「txt明細番号L」+”1″の値を入れるのは、「txt明細番号」の値がNullの時だけ

では、最後にもう一度「txt日付」の「フォーカス喪失後イベントのVBEを開いて、If~End If 文で「txt明細番号」がNull値のときのみプロシージャが実行されるようにVBA記述します。そうすることで、もし前のレコードのページを見に行ったときに、すでに入っている明細番号が上書きされてしまうのを防ぐようにします。

では、最後の最後に「txt明細番号L」のほうは、フォームを普通に開けたときは、見えなくするように設定しておきます。フォームをデザインビューで開けて、「txt明細番号L」の「書式」タブの「可視」プロパティを「いいえ」に設定します。

フォームデザインビュー

これで、入力時には「txt明細番号L」が見えなくなりました。

売上フォーム

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

コメントを残す

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

コメントフィード

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

PAGE TOPへ戻る