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

入力フォームで明細番号を連番で採番する。(まとめ)

明細番号の自動採番に関連するページ

  1. 明細番号の最大値を取得して自動採番する。
  2. Access DMax関数 Max関数
  3. 明細番号の初期値を設定する。
  4. 入力フォームに新たな明細番号を設定する。

明細番号の最大値を取得して自動採番する。

Accessを使って、入力用フォームの明細番号をオートナンバー型のデータ型を使わずに、新しいレコードになるたび、自動的に連番を振っていけるように明細番号の最大値を取得することで、設定していきます。

Accessフォーム

  1. DMax関数で明細番号の最大値を取得する。
  2. 次のレコードに移ったとき、「日付」にカーソルをセットする
  3. 「日付」からカーソルが離れたとき、「DMax関数で取得した値+1」を「明細番号」に入れる
  4. 「明細番号」に「txt明細番号L」+1を入れるのは、「txt明細番号」の値がNullの時だけにする。

明細番号の最大値を取得して自動採番する。

Access DMax関数 Max関数

フィールドの最大値を、抽出条件をつけて取得するときは、DMax関数を使って、引数に条件式を指定する必要があります。
たとえば、同じテーブル内に「170001」から始まる明細番号と、「180001」から始まる明細番号と、番号を2通りの組に分けて利用していたとします。そして、「170001」から始まる組(170001~179999までとした場合)の最大値を求める場合、DMax関数の抽出条件を指定します。

非連結のテキストボックスのコントロールソースの式ビルダーに

=DMax(“[明細番号]”,”[T_main]”,”[明細番号] < 180000″)

または、

=DMax(“明細番号”,”T_main”,”明細番号 < 180000″)

と入力して、「OK」ボタンを押します。それぞれの引数をダブルクォーテーションで括る必要があります。

Access DMax関数 Max関数

明細番号の初期値を設定する。

レコードがまったく無い状態の時(初めて入力をするときや、レコードを全て削除した後、再び入力をするときなど)に、最初の明細番号を入力することを促すために、InputBox関数を使っていきます。

  1. 売上入力フォームの読み込み時イベントにコードを書きます。
  2. 明細番号の最大値を取得するテキストボックス「txt明細番号L」がNull値のとき、つまり、レコードが一件も無くて、最大値が取得できないときに、インプットボックスを表示させます。
  3. インプットボックスのテキストボックスに入力した明細番号を変数「Mei」に入れます。
  4. 変数「Mei」のデータ型は、文字列型(String)なので、CLng関数で、長整数型に変換して、テキストボックス「txt明細番号」に入れます。
Private Sub Form_Load()
Dim Mei As String

If IsNull(Me.txt明細番号L) Then
    Mei = InputBox("明細番号を入力してください。", "明細番号")
  Me.txt明細番号 = CLng(Mei)
End If
End Sub

明細番号の初期値を設定する。(Access InputBox関数)

入力フォームに新たな明細番号を設定する。

同じテーブル内で、明細番号を新たな番号から始めるためにする設定をしていきます。(例えば、170001から連番をとっていたものを、番号を飛ばして、新たに180001から連番を取りたいときなど。)

入力フォームとは別のフォームを用意します。「伝票更新」ボタンを押したときに、新たな明細番号を設定できるようにコードを書いて行きます。

フォーム

標準モジュールにPublic変数「kosin」を整数型(Integer)で宣言します。Publicにするのは、2つのフォーム間で、変数を利用できるようにするためです。

Option Compare Database
Option Explicit

Public kosin As Integer

「伝番更新」ボタンクリック時イベントにコードを書きます。Public変数kosinに「1」を代入して、売上入力フォームを開きます。

Private Sub 伝番更新_Click()

kosin = 1
DoCmd.OpenForm "F_売上main"

End Sub

次に、入力フォームの読み込み時イベントにコードを書いていきます。

Private Sub Form_Load()
Dim Mei As String
If kosin = 1 Then
    DoCmd.GoToRecord , , acNewRec
    Mei = InputBox("明細番号を入力してください。", "明細番号")
    Do While Len(Mei) > 0
        If IsNumeric(Mei) = True Then
            Me.txt明細番号 = CLng(Mei)
            Exit Do
        Else
            Mei = InputBox("明細番号を数値で入力してください。", "明細番号")
        End If
    Loop

    If Len(Mei) = 0 Then
    DoCmd.Close acForm, "F_売上main"
    End If
    kosin = 0
End If
End Sub

入力フォームに新たな明細番号を設定する。

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

コメントを残す

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

コメントフィード

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

PAGE TOPへ戻る