win10pro64
microsoft365access
お世話になります。
データ入力用のフォームの「受注コード」というコントロールにyyyy/mm/ddの後に日が変わるごとに001,002,003という風に自動に最大数を連番入力させたいです。
今現在のフォームのレコード移動時のイベントプロシージャに以下のコードを書いています。
Private Sub Form_Current()
If Me.NewRecord = False Then Exit Sub
Dim AutoID As String
Dim MaxID As Variant
AutoID = Format(Date, "yyyymmdd")
MaxID = DMax("受注コード", "T_受注", "Left(受注コード,4)=" & AutoID)
If IsNull(MaxID) Then
Me.受注コード.DefaultValue = AutoID & "001"
Else
Me.受注コード.DefaultValue = AutoID & Format(Right(MaxID, 3) + 1, "000")
End If
End Sub
これで、20210830001のようにレコードは入るのですが、次のレコードも001のままで002になってくれません。
日が変わるごとに自動的に年月日+最大数宇が入力できる方法を教えてください。
AutoID = Format(Date, "yyyymmdd")
→8桁(文字)Left(受注コード,4)
→4桁(文字)"Left(受注コード,4)=" & AutoID
は常に一致するものが存在しないのでMaxID
は常にNullですhiroton様
ご回答ありがとうございます。
ただ、すみません・・・。
当方のレベルでまだご回答頂いた内容が理解できていません・・・。
申し訳ございません・・・、つまりどういう事でしょうか?
宜しくお願い致します。
検索条件「
"Left(受注コード,4)=" & AutoID
」は絶対に一致するものがないのでDMax("受注コード", "T_受注", "Left(受注コード,4)=" & AutoID)
はどんな場合でもNullになりますなので、いくらレコードが追加されても「受注コード」は「
AutoID & "001"
」にしかなりませんありがとうございます。
そういう事なんですね。
ご指摘を受けて、コードを触ってはみるのですがどうもうまく動きません。
どうすれば下3桁を自動連番にできますか?
教えて頂けませんか?
宜しくお願い致します。
続きの処理(
If IsNull(MaxID) Then
以下)自体は問題ないです。最初に指摘した通り、「目的の範囲」が正しく設定されていないのが問題です具体例を見てみましょう
今日が2021/8/31ならば
AutoID
は20210831
ですLeft(受注コード,4)
はそれぞれ次の通りでAutoID
と比較するとです(Left 関数)
AutoID
は必ず8文字ですが、Left(受注コード,4)
は最大でも4文字にしかなりません。4桁の文字と8桁の文字を比較したら絶対に一致することはありません処理の前後や、実際に使っているデータがどうこうということは関係なく、>> 1の指摘だけでこのプログラムは正常ではないということがわかるわけです
目的の結果を得る方法はいくつかありますが、コードを流用するなら次のような比較を考えればいいです
【解決】
hiroton様
ありがとうございます!
動きました!!
なるほど!そういう意味だったのですね。
このコード自体ネットで調べて拾ってきたものなので意味が分かっていませんでした。
ご指摘を受けてコードの意味が理解出来ました。
とても勉強になりました。
ありがとうございました!