質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

2回答

5183閲覧

AccessでVBAを使って入力フォームの値を更新したい

Office2013

総合スコア4

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/09/29 22:36

Accessで入力フォームを作成しました。Excelのような表にレコードを入力し、確定ボタンをクリックすると、レコードがテーブルに登録される作りです。つまり、表にレコードを入力した段階では、まだ、テーブルに値は登録されません。

イメージ

商品コード商品名数量
A001りんご
A002青りんご
B001ぶどう

上記のような表にレコードを入力するイメージです。

実装したいのは、もう一つボタンを設定し、ボタンが押されると商品コードがAから始まるレコードの数量を「10」に設定するという処理です。

VBA

1Private Sub suryo_input_btn_Click() 2 Dim rst As Recordset 3 Dim sfrm As SubForm 4 Dim record_num As Long 5 Dim i As Long 6 Dim item_cd As String 7 8 Set sfrm = Me!商品入力サブフォーム 9 Set rst = sfrm.Form.Recordset 10 11 'サブフォームのレコード数を格納 12 record_num = rst.RecordCount 13 14 'レコードがない場合は終了 15 If record_num = 0 Then 16 Exit Sub 17 End If 18 19 '先頭レコードに移動 20 rst.MoveFirst 21 22 For i = 1 To record_num 23 item_cd = rst.Fields("商品コード") 24 If item_cd Like "A*" Then 25 rst.Fields("数量").Value = 10 26 rst.Update 27 End If 28 rst.MoveNext 29 Next i 30End Sub

上記コードで商品コードは取得できるのですが、レコード更新部分であるrst.Fields("数量").Value = 10 rst.UpdateUpdate または CancelUpdate メソッドには、対応する Addnew または Edit メソッドが必要です。とエラーが出力されます。

どのようにすれば、入力フォームの値を修正できるでしょうか?

テーブルを更新するサンプルは見つかるのですが、テーブルを更新したいのではなく、画面に表示されている入力フォームの値を変えたいということです。

ご教授のほど、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DreamTheater

2020/09/29 22:41

商品入力サブフォームに対してテーブルの関連付けはされてますか?
Office2013

2020/09/29 23:04

はい。テーブルの関連付けは行っております。
sazi

2020/09/29 23:14

> 表にレコードを入力した段階では、まだ、テーブルに値は登録されません。 > テーブルの関連付けは行っております。 テーブルの関連付け(連結フォーム)の状態であれば、項目内容を変更すると更新されますけど、現状どうやって、 「 表にレコードを入力した段階では、まだ、テーブルに値は登録されません。」の状態を実現しているのですか?
Office2013

2020/09/29 23:22

すみません、Accessファイル自体は他の人が作ったもので、勘違いをしておりました。商品コード自体は手入力ではなく、コンボボックスになっていまして、商品マスタから値を引っ張ってきております。ですので、テーブルの関連付けがされていると思っていたのですが、確定ボタンを押さないと、テーブルに値が登録されないので、テーブルの関連付けはされていないというのが正しいと思います。不勉強で申し訳ありません。
sazi

2020/09/30 00:00 編集

じゃあ、確定ボタンの前にrecordsetを更新しても問題ないのでは? エラーについては、メッセージどおりにeditメソッドが無いからです。
kuma_kuma_

2020/09/30 01:32

質問者様 現在この意味と > 実装したいのは、もう一つボタンを設定し、ボタンが押されると >商品コードがAから始まるレコードの数量を「10」に設定するという処理です。 この意味が > テーブルを更新したいのではなく、 >画面に表示されている入力フォームの値を変えたいということです。 反している状態なんですね 「テーブルを更新しないとフォーム上の値(表示)も更新されない。 でもテーブルは更新したくない」... 回答がしたくてもできないのです。 せめてその辺りを修正追記お願いできますか?
guest

回答2

0

DAO.Recordsetで値を変更する前にEditを呼べば出ない。

vba

1 2rst.Edit 3rst.Fields("数量").Value = 10

ただやりたいことに対してのコードという風には見えないので
もう少し色々詰める必要があるかなと思います。

投稿2020/09/29 23:37

編集2020/09/29 23:39
sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

単にフォームを更新するだけなら rst.Update は不要です。

投稿2020/09/29 22:44

DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Office2013

2020/09/29 23:04

早速のご回答、ありがとうございます!ご回答を受けて調べてみたところ、フォームを更新するだけですと、updateは必要なさそうです。しかし、rst.Updateを削除しても、まだ同じエラーが出る状況です。エラーの原因として考えられることがありましたら、教えていただけないでしょうか?よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問