- ベストアンサー
アクセスで受付番号簿を作ろうと思いましたが上手く行かなくて考えましたが
アクセスで受付番号簿を作ろうと思いましたが上手く行かなくて考えましたが、こんなふうに作ってみましたが評価をお願いします。まず、アクセスで最初の番号をテーブルに入力します。その番号をエクセルにエックスポートしエクセル上で番号一覧(A1+1として)を作ります。そのエクセルの表をアクセスにリンクさせ、その受付番号のところにデータを入れた場合は、入れた最後のデータの受付番号の後をフォームに表示させるようにしました。こうなふうでどうでしょうか? 自分としては、モットアクセスの機能の中で遣りたいのですが、教えて頂けないでしょうか。 お願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#2です。少し訂正。 (2)で、 >フォームにテキストボックスを一つ作り、名前をT受付番号 としていますが、「T受付番号」を「tx受付番号」として ください。 ついでに、T番号の番号フィールドの初期化の方法を一つ 追加しておきます。 同じフォームにボタンを一つ追加し、名前をcmdリセット とします。次に以下のコードをコード表に貼り付け、 保存してください。 Private Sub cmdリセット_Click() Dim db As Database Dim rs As Recordset Dim varInput As Variant Set db = CurrentDb Set rs = db.OpenRecordset("T番号", dbOpenDynaset) If MsgBox("受付番号を初期化しますか?", vbYesNo) = vbYes Then If rs.RecordCount > 0 Then If MsgBox("現在の受付番号は" & rs!番号 & "です。次回表示する番号を入力してください", vbOKOnly) Then varInput = InputBox("次回表示の受付番号の入力", , "数値を入力してください。") If Not IsNull(varInput) Then rs.Edit rs!番号 = varInput rs.Update End If End If Else MsgBox ("T番号の番号フィールドが初期設定されていません。一度、0で初期化します。") rs.AddNew rs!番号 = 0 rs.Update End If End If rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub これで、任意の番号から始めることができます。 テーブルに最初の番号がまだ設定されていない ときは一旦、0を設定します。1から始めたいときは、 もう一度クリックして1を入力してください。 コードにインデントをつけていないので 分かりづらいかもしれませんが、適当に インデントを設定してください。
その他の回答 (5)
- piroin654
- ベストアンサー率75% (692/917)
#4で追加したT番号の番号フィールドの初期化の コードの中で、 If Not IsNull(varInput) Then としているところを If StrPtr(varInput) <> 0 Then に置き換えてください。InputBoxを表示したとき キャンセルを選択するとエラーが出てしまうので 上記のようにします。
- piroin654
- ベストアンサー率75% (692/917)
>うまく表示してくれません。一応動いているようですが。 動いているということは、T番号の番号フィールドは 更新されてカウントアップしている、ということと 思います。 表示の問題みたいですが、#4でも述べたように テキストボックスの名前を tx受付番号 として ください。テキストボックスのプロパティシートを 表示し、名前のところを tx受付番号 とします。 たぶん、この部分を訂正すれば表示されると 思いますが。 エラーは出ていませんか。コード表の一番上に Option Compare Database Option Explicit のように、Option Explicitがなければ、これを 追加してコンパイルしてみてください。
- layy
- ベストアンサー率23% (292/1222)
受付番号が 例えば 1日のうちで1から付番し、翌日にはまた1からクリアする、 1日に使われる最大値の目安が決まっている、 というのであれば、 0001 使用 0002 未使用 0003 未使用 ~ 0099 未使用 0100 未使用 というように100個のレコードを作り 「次は0002番を使う」「0003番を使う」という具合に 値入力でなく値選択していく仕組みができます。 これならVBA使うこと少なくACCESSだけでできます。 普通はVBA使って+1しながら「採番」です。
- piroin654
- ベストアンサー率75% (692/917)
Accessらしい、ということでAccessだけの 方法はいろいろですが、番号を採番する方法の 一つ。 (1) T番号: 番号(数値型):主キーは設定しない。 というテーブルをつくります。 (2) フォームにテキストボックスを一つ作り、名前をT受付番号 とし、ボタンを一つ作り、名前を仮にcmd番号表示とします。 フォームのコード表を開き、コード表のツール→参照設定 を開き、Microsoft DAO xx Object Library にチェックを いれます。xxは3.6などの数値です。このとき、 Microsoft ActiveX Data Object xx Library にチェックが 入っていたらチェックをはずしてください。 以上の操作をしてOKを押し、参照設定を閉じます。 次に、以下のコードをコード表に貼り付け、保存してください。 Private Sub cmd番号表示_Click() Dim db As Database Dim rs As Recordset Set db = CurrentDb Set rs = db.OpenRecordset("T番号", dbOpenDynaset) 'フォームのテキストボックスに番号を表示 Me!tx受付番号 = rs!番号 'T番号の番号フィールドの更新 rs.Edit rs!番号 = rs!番号 + 1 rs.Update rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub (3) テーブル T番号の番号フィールドは初期値は 0が表示されていますが、一旦、0を入力し レコードを確定しておいてください。 0だと最初にフォームに表示される番号は0ですが、 1としておけば最初に1と表示されます。 以上で、設定は終了です。フォームのボタンを 押していけば、番号が表示されます。それに つれてT番号の番号フィールドの番号もカウントアップ されていきます。 いろいろ工夫してみてください。
- rukuku
- ベストアンサー率42% (401/933)
こんばんは フィールドのデータ形式にオートナンバーがあるのでそれを利用する方法が考えられます。ただし番号をリセットすることは出来ません。 毎日1番から始めたいという場合には、VBAになると思います。 「今日の最大値+1」という形で求めることが出来ます。
お礼
piroin654有難う御座いました。早速挑戦しましたが、うまく表示してくれません。一応動いているようですが。どこかが違っているのか、よろしくお願いします。