お世話になります。アクセスでデータを入力するフォームを作っているのですが、月とNoと内容というフィールドがあったときに、今までは、その月に使用する分のレコードをエクセルで作成し、テーブルに貼り付けていました。この作業をボタンを押すと「月を入力して下さい」、「No(始まり)を指定してください」、「NO(終わり)を指定してください」とメッセージを表示し、自動でその分のレコードが追加されるというようにしたいのですが、どうすればよいですか?
ご指導のほど、よろしくお願いします。
<テーブルイメージ>
月 No 内容
5月 1 (空欄。入力者がその都度、Noを指定して開き、入力)
5月 2
5月 3
↑ボタンを押すと自動でレコードと追加したい。
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
ですかね。
ご丁寧にご回答くださり、ありがとうございます。アクセスの機能もどこまで出来るのか分からないため、自分自身いろいろ試しているところです。こちらのサイトでも何かヒントになるものがあるかと思い、質問してみました。コードも使用できそうなサンプルを探していろいろ加工しているので、正直ひとつひとつの構文の意味は分からない状態です。
レコードの追加も実はまだ追加したいテーブルが複数あるため、これを一括して行えるように加工してみようと思っています。エラー処理も少し勉強して加えられるようにしようかと思っています。ご回答くださった回答を参考にさせてもらいます。今後もよろしくお願いします。
No.2
- 回答日時:
はい。
でも、毎回作るのではなくて、最初に作るだけです。なので最大値を「絶対こんなに使わない」ってとこまで作ります。その後は、毎月クエリを開く作業をすればデータが追加されます。もし万が一、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
No.1
- 回答日時:
(1)NOというフィールドのみ持つテーブルを作成し、考えうる最小NOから最大NOまでを入力します。
最小は0になると思うのですが、平均50まで使うなら100までというように余裕をもった最大NOにしておきます。(2)デザインビューでクエリを作成し、(1)で作ったテーブル(ここでは「T_Num」とします)を表示させ、クエリの種類を追加クエリに設定します。追加先はもちろん追加したいテーブルです。クエリのフィールドは下記のようにして下さい。
フィールド 月:[月を入力して下さい] NO
テーブル T_Num
レコードの追加 月 No
抽出条件 >=[No(始まり)を指定してください] And <=[NO(終わり)を指定してください]
(3)作成したクエリを保存し、閉じたら、開こうとして下さい。すると、メッセージが表示されご希望のようにレコードが追加されると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
高校生はアルバイトするべきだろうか?賛成だったら「賛」、否定だったら「否」を文頭においてあなたの意見を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
ACCESS 入力フォームでテーブルへデータを複数追加する
Access(アクセス)
-
Access レポート印刷するときに1ページに収める方法
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「バリアント型でない変数に Nu...
-
Accessフォームが入力できません。
-
インデックスまたは主キーにはn...
-
access別のテーブルを参照して...
-
前のレコードの値を自動で入れたい
-
Accessでデータを更新したらそ...
-
AccessVBAの値によっ...
-
ACCESSでフォームのチェックボ...
-
Accessのフォーム入力をしても...
-
accessでファイル名とテーブル...
-
入力した値をコンボボックスに...
-
ACCESS2003で、テーブルの更新...
-
ACCESS フォームで入力データ...
-
アクセスについての質問です
-
Access2010について教えてくだ...
-
テキスト型のフィールドでハイ...
-
accessでオプションボタンを使...
-
フォームのテキストボックス→ク...
-
Accessフォーム上の値を条件と...
-
エクセルで、抽出したデータだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
前のレコードの値を自動で入れたい
-
access別のテーブルを参照して...
-
インデックスまたは主キーにはn...
-
AccessVBAの値によっ...
-
Accessでフォームに自動入力し...
-
アクセスでコードを入れると名...
-
Accessでデータを更新したらそ...
-
入力した値をコンボボックスに...
-
Accessフォームが入力できません。
-
ACCESS フォームで入力データ...
-
テキスト型のフィールドでハイ...
-
ACCESS2000の帳票フォームでテ...
-
ACCESSでフォームのチェックボ...
-
accessでオプションボタンを使...
-
access ダブリ登録を防止したい
-
Accessフォーム上の値を条件と...
-
アクセスのフォームの必須項目...
-
「バリアント型でない変数に Nu...
-
Accessで、最後(更新)にエラ...
-
Access 自動入力の解除方法
おすすめ情報