Microsoft Access 掲示板

複数選択後、項目毎の自動採番について / 4

5 コメント
views
4 フォロー
4
hiroton 2020/09/23 (水) 10:02:54 7416f@f966d

後から見直したらもっといいコードがあったんじゃないかなと思うことはよくあること。なので

Dim lastID As String
Dim newNo As Long

lastID = Nz(DMax("発行番号", "発行簿", "コード='" & Me!コード & "' AND 区分='" & Me!区分 & "'"))
If lastID = "" Then
    '//新規(条件グループの連番が見つからなかった時)なので初期値を設定する
    If Me!区分 = "後" Then
        newNo = 501
    Else
        newNo = 1
    End If
Else
   '//連番部分を取り出して1増やす
    newNo = Val(Right(lastID, 3)) + 1
End If

Me!発行番号 = Me!コード & "-" & Me!区分 & "-" & Format(newNo, "000")

先のコードよりわかりやすくなってると思います

区分で設定を変えたいということでそこだけ条件分岐にしましたが、元々の「連番+1の処理」をそのまま残して初期値側を「後でプラス1されるからマイナス1しておく」ように弄ったところも条件分岐させてあげたほうが直感的に書けますね

ついでにlastIDAs String指定できるので変な使い方ができないよう(バグのもとにならないよう)に制限できるのも良い点かなと


余談
変数名も「lastNo」と「newNo」だとそっくりなのに中身別物じゃないかってなるので手を加えてみました

通報 ...