- ベストアンサー
アクセスで自動でレコードを増やす
- アクセスでデータを入力するフォームを作っている場合、月とNoと内容のフィールドがあります。以前は、月ごとのレコードをエクセルで作成し、テーブルに貼り付ける作業をしていました。しかし、ボタンを押すだけで自動的に指定した月のレコードを追加する方法を知りたいです。
- アクセスでデータを入力するフォームを作成しています。月とNoと内容のフィールドがあり、月ごとのレコードを手動で作成していますが、これを自動化したいです。ボタンを押すと、指定した月のレコードが自動的に追加される仕組みが欲しいです。
- アクセスでデータを入力するフォームを作成しています。月とNoと内容のフィールドがありますが、手動で月ごとのレコードを作成しています。しかし、ボタンを押すだけで指定した月のレコードを自動的に追加する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
VBAでやりたかったんですね。最初からそういう風に質問して下さい。そう言われないと、できるだけ基本機能で対応できるように考えて回答してしまいます。最初から、ループさせて作る方が早いのは解っていましたが、質問者様がどれくらいの知識をお持ちなのかも解らず、こちらもどこまでもフォローできるわけではないので、誰でもメンテナンスしやすい基本機能をわざわざ検討しての回答でした。最初からご自分で検討されたVBAのコードを載せて頂いたらそれに対してのコメントのみで済んだのです。それと、こちらに書かせて頂くのは筋違いかもしれませんが、最近、ご自分で何の検討もされずに「こういうことがやりたいのでコードを書いて下さい」という質問が目につきます。VBAといえどもプログラムは知的財産であって、本来ならお金を払って依頼するものです。ご自分でやられるなら、何かしら自分でコード書いて意見を求めるのが筋だと思います。質問者様がどういうつもりでご質問されたのか解らずにこんなことを書かせてもらってすいません。 さて、補足に載せて頂いたコードへのコメントですが、 > ipt1 = InputBox("月を入力して下さい") > ipt2 = InputBox("No始まりを指定してください") > ipt3 = InputBox("NO終わりを指定してください") ここで「キャンセル」を選んだ場合、や数値以外が入力された場合、 >For i = ipt2 To ipt3 の部分でエラーが発生します。せめてエラートラップでデバックウィンドウが開かないようにだけはしておかないと、何もわからない使用者が驚いてしまいます。 私なら、 Public Sub rensyu1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim i As Integer Dim ipt1 As Integer 'Stringではなく数値のみにします Dim ipt2 As Long 'Stringではなく数値のみにします Dim ipt3 As Long 'Stringではなく数値のみにします 'エラーの時は抜けます。 On Error GoTo rensyu_Exit ipt1 = InputBox("月を入力して下さい") '1以上12未満の入力以外は13:型エラー If ipt1 < 1 Or ipt1 > 12 Then Err.Raise 13 ipt2 = InputBox("No始まりを指定してください") ipt3 = InputBox("NO終わりを指定してください") 'インプットボックスでエラーがあればrs・cnはNothingになるようにします。 Set cn = Application.CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "test", cn, adOpenKeyset, adLockOptimistic For i = ipt2 To ipt3 rs.AddNew rs!Mon = ipt1 & "月" '入力は数字のみにしてここで「月」を足します。 rs!No = i 'ipt2ではなくiの値にします。 'rs!naiyo = "" ----空白が許可されているならこれは省きます。 'ipt2 = ipt2 + 1 ---- iの値が勝手に連番を振ってくれます。 Next i rs.Update rs.Close cn.Close rensyu_Exit: If Err.Number > 0 Then MsgBox ("追加されませんでした") Set rs = Nothing Set cn = Nothing End Sub ですかね。
その他の回答 (2)
- fly_moon
- ベストアンサー率20% (213/1046)
はい。でも、毎回作るのではなくて、最初に作るだけです。なので最大値を「絶対こんなに使わない」ってとこまで作ります。その後は、毎月クエリを開く作業をすればデータが追加されます。もし万が一、Noが最大値を越えるようなことがあれば、その時は(1)テーブルに追加すればいいんです。その後は又、そのNo未満の番号の使用ならそのまま使えます。 1度の作業でも面倒だとおっしゃるなら、お金を出して誰かに開発してもらうしかないでしょう。
補足
とくに今までのやり方も面倒なわけではなかったのですが、新しい人も使用するために、みんながわかりやすいものを作成しようと思っています。 いろいろな資料をみて下記のモジュールを作成してみたのですが、どなたかここは違うというところがあれば教えてください。(モジュールも初めて作成するので自信がありません。特にループの入れる場所も適当です・・・) Public Sub rensyu1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim i As Integer Dim ipt1 As String Dim ipt2 As String Dim ipt3 As String Set cn = Application.CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "test", cn, adOpenKeyset, adLockOptimistic ipt1 = InputBox("月を入力して下さい") ipt2 = InputBox("No始まりを指定してください") ipt3 = InputBox("NO終わりを指定してください") For i = ipt2 To ipt3 rs.AddNew rs!Mon = ipt1 rs!No = ipt2 rs!naiyo = "" ipt2 = ipt2 + 1 Next i rs.Update rs.Close cn.Close End Sub
- fly_moon
- ベストアンサー率20% (213/1046)
(1)NOというフィールドのみ持つテーブルを作成し、考えうる最小NOから最大NOまでを入力します。最小は0になると思うのですが、平均50まで使うなら100までというように余裕をもった最大NOにしておきます。 (2)デザインビューでクエリを作成し、(1)で作ったテーブル(ここでは「T_Num」とします)を表示させ、クエリの種類を追加クエリに設定します。追加先はもちろん追加したいテーブルです。クエリのフィールドは下記のようにして下さい。 フィールド 月:[月を入力して下さい] NO テーブル T_Num レコードの追加 月 No 抽出条件 >=[No(始まり)を指定してください] And <=[NO(終わり)を指定してください] (3)作成したクエリを保存し、閉じたら、開こうとして下さい。すると、メッセージが表示されご希望のようにレコードが追加されると思います。
補足
(1)の作業はやはり予め入力していないと駄目ですよね・・・。
お礼
ご丁寧にご回答くださり、ありがとうございます。アクセスの機能もどこまで出来るのか分からないため、自分自身いろいろ試しているところです。こちらのサイトでも何かヒントになるものがあるかと思い、質問してみました。コードも使用できそうなサンプルを探していろいろ加工しているので、正直ひとつひとつの構文の意味は分からない状態です。 レコードの追加も実はまだ追加したいテーブルが複数あるため、これを一括して行えるように加工してみようと思っています。エラー処理も少し勉強して加えられるようにしようかと思っています。ご回答くださった回答を参考にさせてもらいます。今後もよろしくお願いします。