プロが教えるわが家の防犯対策術!

フォームで新規入力をする際に自動で連番を振りたいです

初心者でいろいろと調べているのですがうまくいきません

下記のような連番を振る方法を教えてください

"Eyymmdd A "E"は固定で yy(西暦2ケタ)mm(月)dd(日)A(Aから始め、同じ日だとB,C,…と最大26(Z)まで)振っていく。日が変わるとまたAから始まる


「テーブル名」連絡文書E
「クエリ名」連絡文書Eクエリ
「フォーム名」連絡文書E

「フィールド名」管理番号(テキスト型)
E110105 A
E110130 A
E110130 B
E110130 C
E110202 A…

と"E"を固定 yy(西暦2ケタ)mm(月)dd(日)Aから始まり、同日であればB,C~と
日が変わるとAからまた始まるという連番をふりたいです


煮詰まってしまい、どうしてよいかわからない次第です

初心者にとても難しい事は承知しておりますが、何卒よろしくお願い致します

A 回答 (1件)

VBAで行わねばなりませんけど大丈夫?



新規入力時に今日の日付と照らし合わせて連番を振る場合です。
昨日の文書の連番や未来の日付の連番は考えてません。

Alt + F11 を押して、VBEに切り替えて
メニュー→挿入→標準モジュールにて

Function getNewSeq()
  If Format(Date, "yymmdd") = Mid(DMax("管理番号", "連絡文書E"), 2, 6) Then
    If Right(DMax("管理番号", "連絡文書E"), 1) = "Z" Then
      MsgBox "Zまで一杯です"
      Exit Function
    End If
    getNewSeq = "E" & Format(Date, "yymmdd") & " " & _
          Chr(Asc(Right(DMax("管理番号", "連絡文書E"), 1)) + 1)
  Else
    getNewSeq = "E" & Format(Date, "yymmdd") & " " & "A"
  End If
End Function

さらに、フォームでも
デザインビューでフォームのプロパティのイベントの、「レコード移動時」に
Private Sub Form_Current()
If Me.NewRecord Then
Me!管理番号 = getNewSeq
End If
End Sub

としてみてください。
※フォーム名とテーブル名が同じなので、
今後VBAの記述が増えれば、パッと見で分かりにくいので
「フォーム名」連絡文書E→F_連絡文書E
とかにしておいた方が宜しいかと。
クエリもね。

この回答への補足

お世話になっております

汗かきかきご教示いただいたVBAに取り組んでいますが、
どうしてもデバックがでてしまい、解決方法がわかりません

実行時エラー3078
入力テーブルまたはクエリ’連絡文書E’がみつかりませんでした。そのテーブルやクエリが存在していること、または名前が正しいことを確認してください

と、出るので、テーブル、クエリを作成し直したのですが、エラーのままです

デバックの箇所は
If Format(Date, "yymmdd") = Mid(DMax("管理番号", "連絡文書E"), 2, 6) Then
です

フォームのプロパティのイベントの「レコード移動時」のコードビルダの入力箇所を
フォームをデザインビューで開いた時の詳細連番を振りたいと思っている”管理番号”のテキストボックスのプロパティのイベントの「更新前処理」にしてみたり、
フォームのイベントのビルドのコードビルダにしてみたりしました
(思いっきり間違えたことをしているのか??と感じながら(涙))


恐れ入りますが、何卒ご教示をお願いいたします

補足日時:2011/10/31 15:15
    • good
    • 0
この回答へのお礼

早速のご教示ありがとうございました
ご連絡が大変遅くなりまして申し訳ございません
緊急事態が発生してしまい、本日より改めて対応する所存です
またご教示をお願いすると思いますで、
何卒よろしくお願い申し上げます

お礼日時:2011/10/26 10:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!