お世話になります。アクセスでデータを入力するフォームを作っているのですが、月と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で質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Visual Basic(VBA) マクロで設定時刻の入力がわかりません 2 2022/03/29 02:24
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Access(アクセス) accessについて(超初心者です) 1 2023/02/11 11:18
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
access別のテーブルを参照して...
-
Access2010 レコードの更新日付...
-
Accessフォームが入力できません。
-
入力した値をコンボボックスに...
-
前のレコードの値を自動で入れたい
-
インデックスまたは主キーにはn...
-
Accessでフォームに自動入力し...
-
access ダブリ登録を防止したい
-
エクセル フィルタの抽出結果...
-
アクセスコマンドボタンで登録。
-
アクセスでコードを入れると名...
-
Access サブフォームでの選択行...
-
ACCESSでVBAから選択クエリの抽...
-
googleフォームでインストール...
-
access サブフォームにリストを...
-
Access 複数フォームを...
-
ExcelのComboboxでマウスのスク...
-
COUNTIFのやり方を教えてくださ...
-
.flex-direction プロパティは...
-
Accessのコンボボックスでリス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータを更新したらそ...
-
前のレコードの値を自動で入れたい
-
インデックスまたは主キーにはn...
-
Accessでフォームに自動入力し...
-
access別のテーブルを参照して...
-
Accessフォームが入力できません。
-
入力した値をコンボボックスに...
-
ACCESSでフォームのチェックボ...
-
テキスト型のフィールドでハイ...
-
access ダブリ登録を防止したい
-
ACCESS フォームで入力データ...
-
アクセスでコードを入れると名...
-
Accessのフォーム入力をしても...
-
AccessVBAの値によっ...
-
Accessで、最後(更新)にエラ...
-
「バリアント型でない変数に Nu...
-
ACCESS2000の帳票フォームでテ...
-
アクセスで自動でレコードを増やす
-
ACCESSで定型入力の〒が表示さ...
-
Accessのフォームでデータ入力...
おすすめ情報