教えて! goo のコンテンツに対する取り組みについて

AccessのVBAを教えてください。
「名簿1」というテーブルがあり、そのテーブルの1つのレコードを「名簿2」という別テーブルに移動させたいです。

「名簿検索」フォームがあり、「名簿1」のデータを検索して表示させることができます。
その表示させたある特定のレコードを、「移動」というボタンを押すと「名簿2」へ移動させるような作りにしたいです。
「名簿1」と「名簿2」は全く同じ構造のテーブルです。

初心者のため、一番簡単な方法でやりたいです。
レコードを「名簿2」へコピーし、その後「名簿1」のレコードを削除しようと思ったのですが、なかなかうまくできません。
insert into を使ってみたのですが、テーブルのデータ全てがコピーされてしまいます。

Access2010を使用しています。
よろしくお願いいたします。

gooドクター

A 回答 (2件)

No.1です


以下を追加してみてください(変数名は任意です)
Dim RSF As Recordset ← フォームに表示されているレコード用
DIM I As Integer    ← カウンター用の変数

Set RSF = Me.Recordset でRSFにフォームに表示されているレコードセット

RS.AddNew から RS.Update の部分を以下に変更します

RS.AddNew
 For I = 0 To フィールドの数-1 ← フィールド数が20ならば19
  RS.Fields(I) = RSF.Fields(I)
 Next I
RS.Update

これでコピーできます。
    • good
    • 0
この回答へのお礼

無事にできました!
本当にありがとうございました。

お礼日時:2017/08/22 10:26

名簿1と名簿2のフィールドが 氏名、住所、TEL だったとします。


名簿検索フォームに配置したテキストボックスが、Tx_氏名、Tx_住所、Tx_TELだとして、

Dim DB As Database
Dim RS As Recordset

Set DB = CurrentDb
Set RS = DB.OpenRecordset("名簿2", dbOpenDynaset)

RS.AddNew
RS!氏名 = Me.Tx_氏名  ←名簿2へコピー
RS!住所 = Me.Tx_住所
RS!TEL = Me.Tx_TEL
RS.Update

DoCmd.SetWarnings False ← システムメッセージを非表示
DoCmd.RunCommand acCmdDeleteRecord ←名簿1(名簿検索フォーム)のレコード削除
DoCmd.SetWarnings True ← システムメッセージを表示

RS.Close: Set RS = Nothing
DB.Close: Set DB = Nothing
    • good
    • 0
この回答へのお礼

とても分かりやすくありがとうございます。
ちなみに、フィールドがかなり多数あるのですが、
ひとつひとつ指定ではなく、まとめてすべてを指定する方法はありますでしょうか。
2つのテーブルはフィールド名も、テーブル上のフィールドの位置もすべて同じです。
手動でいうと、名簿1で行選択してコピーして、名簿2へ貼付け という感じです。

お礼日時:2017/08/22 09:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング