Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Home Premium : Access 2010)
検索したデータをテーブルにコピー
投稿日時: 17/08/29 11:26:04
投稿者: MJ

 
 
いつもお世話になります。
 
フォームで検索したデータに修正を加えて
新たなレコードとして追加したいです。
 
 
「1.新規入力フォーム(F_新規)」と
「2.検索フォーム(F_検索用)」があります。
 
「1.新規入力フォーム(F_新規)」は非連結
テキストボックスとコンボボックスで作成、
入力したデータは、テーブル「3.T_保存用」に格納し
その時に一番大きいID番号(オートナンバー型)を取得し
それを元にユニークの<注文番号>を取得するように
しています。
 
「2.検索フォーム(F_検索用)」は、「3.T_保存用」の
テーブルを元に作成した選択クエリ「4.Q_検索」で
検索用テキストボックスに<注文番号>を入れると該当の
レコードが表示されるようにしています。
 
 
1と2のフォームは分けずにできたらよかったのですが
やり方がわからず
 
1は新規のデータを入力するときに、
2は既存のデータを検索し、修正をしたあとで
新たに<注文番号>を取得して
テーブル「3.T_保存用」に追加したいと思っています。
 
 
抽出したデータを新たなレコードとしてテーブルに
追加する方法がわからず、いったんCreateQueryDefメソッドで
データベースにクエリを作成しそこから更新?テーブル作成?か
対応したほうがいいのかなと思い試してみましたが
コンパイルエラーなど出てしまい、うまくいきませんでした。
 
 
そもそもどうするのが一番良い方法なのかわからないままですが
 
レコードの検索→修正→コピー?→テーブルに追加?
レコードの検索→コピー→テーブルに追加→フォームに呼び出して修正?
 
 
アドバイスをいただけましたら幸いです。
宜しくお願いいたします。

回答
投稿日時: 17/08/29 12:49:33
投稿者: hatena
投稿者のウェブサイトに移動

新規入力フォーム(F_新規)からの新規レコードしての登録はできているのですよね。
 
なら、下記のような仕組みにするのが簡単では。
 
検索フォーム(F_検索用)でレコード検索する。
 
検索フォーム上の「新規レコードにコピー」ボタンをクリックで、下記のVBAを実行。
 新規入力フォーム(F_新規)を開く。
 F_検索用 のデータを F_新規 に代入する。
 
ユーザーは F_新規 で修正して、レコード登録。

投稿日時: 17/08/29 14:57:25
投稿者: MJ

hatenaさん
 
いつもお世話になっております。
早々にありがとうございました。
 
教えていただいた代入ということは、
 
'検索フォームの結果を新規フォームに値を代入
DoCmd.OpenForm "F_新規", acNormal, , , acFormEdit, acWindowNormal
Forms![F_新規]![項目1] = Me![項目1]
 
みたいな感じでしょうか・・・_?
 
まだ途中ですが、確かに代入することができました。
ありがとうございます!
 
ちなみに、、初歩的なことで申し訳ないんですが
もうひとつ教えてください。
 
代入する項目がたくさんあるので、フォーム「F_新規」を
変数にしようと思ったんですが、オブジェクト変数が設定されて
いないというエラーになってしまいます。。。
 
調べてみたんですが、なぜなのかがよくわからず
ご教示いただけたらありがたいです
 

回答
投稿日時: 17/08/29 17:18:33
投稿者: hatena
投稿者のウェブサイトに移動

MJ さんの引用:

教えていただいた代入ということは、
 
'検索フォームの結果を新規フォームに値を代入
DoCmd.OpenForm "F_新規", acNormal, , , acFormEdit, acWindowNormal
Forms![F_新規]![項目1] = Me![項目1]
 
みたいな感じでしょうか・・・_?

 
はい、そうです。
 
MJ さんの引用:

代入する項目がたくさんあるので、フォーム「F_新規」を
変数にしようと思ったんですが、オブジェクト変数が設定されて
いないというエラーになってしまいます。。。

どのようなコードを書いたのか提示してもらわないと、、、
通常は下記のような感じですが、
 
Dim F As Form

Set F = Forms!F_新規

F!項目1  = Me!項目1

 
 
項目が多数ある場合は、例えば下記のようにするとシンプルに記述できます。
 
Const Items = "項目1 項目2 項目3 項目3" '項目名を空白区切りで列挙
Dim Item
Dim F As Form

Set F = Forms!F_新規

For Each Item In Split(Items)
    F(Item) = Me(Item)
Next

投稿日時: 17/08/29 17:31:24
投稿者: MJ

hatenaさん
 
ありがとうございます。
色々やりすぎて、どこでどのエラーが出たか
わからなくなりコードをはしょってしまいました。
 
メモ書きに残っていたコードは
 
Dim F As Form
Set F = Forms![F_新規]
  
'検索フォームの結果を新規フォームに値を代入
F![項目名] = Me![項目名]
 
だったので、合っているような気がしましたが
今気づきました。
[ ]が不要だったのかもしれません・・・!
基本的なところですね。もう一度確認してみます。
 
教えていただいたConst Items が
とても便利そうなので、これからまだまだ
フォームを作らないといけないので
活用させていただきたいと思います!
 
また別の質問をさせていただくかと思うのですが
宜しくお願いいたします。
 
大変助かりました。ありがとうございます。