- ベストアンサー
アクセスで社員番号を自動で発行する方法を教えてください
- アクセスで社員番号を自動的に振る方法を教えてください。社員番号は7桁で、「1008001」のような番号が振られます。入社年度によって変わる頭2桁と、連番の最後3桁は自動で生成したいです。現在試したVBAのコードでエラーが発生しており、解決方法が分かりません。
- アクセスで社員番号を自動で発行する方法を教えてください。社員番号は7桁で、入社年度によって変わる頭2桁と、連番の最後3桁を自動で生成したいです。現在試したVBAのコードでエラーが発生しており、解決方法が分かりません。
- アクセスで社員番号を自動で発行したいです。社員番号は7桁で、入社年度によって変わる頭2桁と、連番の最後3桁を自動で生成したいです。VBAのコードを試しているのですが、エラーが発生して困っています。解決策を教えてください。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
>Sub 入社年月日_AfterUpDate() >Dim MaxNO As Integer >Dim NOTOP As String またまた見落としです MaxNOはIntで宣言してありますね これじゃオーバーフローして当然です Longに代えてください ところでこのコード本当にどこかから拾って来たの? どこかに掲載してあったとしたらあまりにもミスが多すぎますよ 本当はあなたが書いたものじゃないの?
その他の回答 (8)
- CHRONOS_0
- ベストアンサー率54% (457/838)
社員番号のデータ型は? 整数型だと32768までしか格納できませんよ
補足
数値型の長整数型です。これではだめでしたでしょうか?? 今入っているデータは200個くらいなんです。
- CHRONOS_0
- ベストアンサー率54% (457/838)
あらら!とんでもないポカをしていましたね 修正したコードのDMaxの引数の順序が間違っているのに気がついてませんでした (よく見るとDCountのほうもおかしいですね。かなりひどいコードですね) 失礼しました MaxNO = Nz(DMax("社員番号","人事管理", "left(社員番号,4)='" & NOTOP & "'"), NOTOP & "000") に変えてください
補足
度々、ありがとうございます!! コピペさせて頂きました。 またエラーが出てしまいました・・。 今度は「実行時エラー6 オーバーフローしました」とメッセージが出てしまいました。でも今テーブルに入っている社員番号は1008022までなので、まだまだ空きがあるはずなのですが・・・。 そしてまた、MaxNO = Nz(DMax("社員番号","人事管理", "left(社員番号,4)='" & NOTOP & "'"), NOTOP & "000")この部分が黄色く塗りつぶされてしまいました。 度々申し訳ありませんがよろしくお願い致します。
- CHRONOS_0
- ベストアンサー率54% (457/838)
>でもやはり、エラーになり、直前の操作はキャンセル・・・というメッセージがでて、 >先ほどの所が黄色く塗りつぶされている状態になりました。 おかしいですね、なんかぴんとくるとことのないエラーですね 正確なエラーメッセージとエラー番号は何でしょう それと社員番号フィールドのデータ型は何でしょう
補足
今日はまた前回のメッセージで、「実行時エラー3078」「入力テーブルまたはクエリ'社員番号’が見つかりませんでした。そのテーブルやクエリが存在していること、または名前が正しいことを確認してください。」とでて、 MaxNO = Nz(DMax("人事管理", "社員番号", "left(社員番号,4)='" & NOTOP & "'"), NOTOP & "000")の所が黄色く塗りつぶされました。 テーブル名はあっていますし、社員番号もテーブルの中に社員番号という名前で入れてあります。 社員番号は数値型で入れています。ちなみにテキスト型でも試してまいましたが同じでした。 今日は直前の操作はキャンセルされましたというメッセージは出ませんでした。 何度もすみませんが、よろしくお願い致します。
- bonaron
- ベストアンサー率64% (482/745)
「elseに対応するifがありません」と表示されます。 http://oshiete1.goo.ne.jp/qa4316690.html
補足
ありがとうございます。 頂きましたURLを参考に、最初に入れていたもので改行してみましたが、 '年度内社員数抽出 NO = DCOUNT("テーブル名","社員番号 Like '" & NOTOP & "*'") の部分が黄色く塗りつぶされて、社員場号Like1008が見つかりませんでした。というエラーメッセージが出てしまいました。。。。
- CHRONOS_0
- ベストアンサー率54% (457/838)
アップしてあったコードを添削しただけだったので 見落としていましたが下のところもおかしいですね >[社員番号] = MaxNO+1 社員番号の前にMeを付けてください Me.[社員番号] = MaxNO+1
補足
ありがとうございます。 今、Me.[社員番号] = MaxNO+1に修正しました。 でもやはり、エラーになり、直前の操作はキャンセル・・・というメッセージがでて、先ほどの所が黄色く塗りつぶされている状態になりました。 社員番号をテキスト型とか数値型といろいろ書式を変えてみたりもしたのですが。。。 何度も何度もすみません。。
- CHRONOS_0
- ベストアンサー率54% (457/838)
まさかテーブル名のところもそのままじゃないでしょうね そこにはあなたのテーブル名を入れるのですよ
補足
テーブル名は作成したテーブル名を入れています。 「人事管理」というテーブル名なので、人事管理と入れました。そこを間違えているのかなと思い、テーブルの名前をコピペして入れてみたのですが、それでもエラーになってしまいました。。。。
- CHRONOS_0
- ベストアンサー率54% (457/838)
失礼しました。間違ってますね MaxNO = Nz(DMax("テーブル名","社員番号","left(社員番号,4)='" & NOTOP & "'"),NOTOP & "000") に変えてください =の後にシングルクォーテーションを追加しています
補足
度々ありがとうございます。 またコピペさせて頂いたのですが、またエラーが出てしまいました。 メッセージは、直前の操作はキャンセルされました。としかでないのですが、やはり「MaxNO = Nz(DMax("テーブル名","社員番号","left(社員番号,4)='" & NOTOP & "'"),NOTOP & "000")」の部分が黄色く塗りつぶされている状態になってしまいました。 もともとの私のアクセスの作り方が間違っているのでしょうか。 すみませんが再度教えていただけますか? よろしくお願い致します。
- CHRONOS_0
- ベストアンサー率54% (457/838)
あまりいいプログラムじゃないですね どこから持ってきたの? NOなんて非常に危険な予約語を変数名に使うのは絶対にNGです Sub 入社年月日_AfterUpDate() Dim MaxNO As Integer Dim NOTOP As String NOTOP = "10" & Format(DateAdd("m",-3,[入社年月日]),"yy") '年度内社員番号の最大抽出 MaxNO = Nz(DMax("テーブル名","社員番号","left(社員番号,4)=" & NOTOP & "'"),NOTOP & "000") '社員番号発行 [社員番号] = MaxNO+1 End Sub オーバーフローは考慮していません オーバーフローする恐れがわずかでもあるのなら最初から桁数をもうひとつ増やしておくのが データベース設計のやりかたです
補足
ありがとうございます!! 他のサイトで書かれていたのでそのままコピペさせてもらっちゃったんです。 NOはNGということすら知りませんでした。。。 教えて頂いてありがとうございます。 CHRONOS_0さんのをコピペさせて頂いたところ、 MaxNO = Nz(DMax("テーブル名","社員番号","left(社員番号,4)=" & NOTOP & "'"),NOTOP & "000") この部分で「'クエリ式left(社員番号,4)=1008"の構文エラーです。」と出てしまいました。 テーブルとフォームだけ作ってあって、フォームに入社年月日を入れたら出るようにと思い、フォームの入社年月日にコピペさせて頂いたのですが、違ったのでしょうか? すみませんが、再度教えて頂けますか? あとオーバーフローすることはないので大丈夫です。 よろしくお願いします。
お礼
ありがとうございます! できました!!何度も何度もありがとうございました。 またこのあとも作成をするのでわからないことがありましたら質問させて頂きますのでその時はまたよろしくお願い致します。 ちなみにこのコードはOKWAVEで、最初、社員番号を自動的に振るにはどうしたらいいですか?と質問したんです。そしたらこのコードの回答を頂いたのですが、エラーしてしまうんですとまた質問させて頂いたきりご返答頂けず、こちらに最初回答を頂いたコードをコピペして改めて質問させて頂いたんです。 本当にありがとうございました。