Microsoft Access 掲示板

レコードをVBAでまるごとコピー

4 コメント
views
4 フォロー

レコードのコピーについて教えてください。

オートナンバー型を除くレコードのすべてのフィールドをコピーしたいです。
どなたかご教授下さい。
全く同じフィールドを持つテーブルが4つあります。
一つの帳票フォームで、そのテーブル4つをボタンで切り替えられるようにしてあります。

その帳票フォームは必要なフィールドのみを表示させていて、すべてのフィールドを表示させていません。
そのような状態で、選択したレコードの複製を行いたいので以下のようにVBAを記述しそのフォームへボタンを追加ました。

Private Sub コマンド3390_Click()
'[コピー]ボタンクリック時

'現在カーソルのある行全体を選択
DoCmd.RunCommand acCmdSelectRecord
'その内容をコピー
DoCmd.RunCommand acCmdCopy
'追加貼り付けを実行
DoCmd.RunCommand acCmdPasteAppend
'貼り付けられたレコードに移動
DoCmd.GoToRecord , , acLast

End Sub

するとフォーム上に表示されているフィールドだけコピーされた新規レコードができるのですが、表示されていないフィールドもすべてコピーされた新規レコードを作りたいのですが、どうすればいいのかさっぱりわかりません。

どなたかご教授下さい。
よろしくお願いいたします。

hassy-hhh
作成: 2022/01/12 (水) 12:53:45
通報 ...
1

フォーム上に連結コントロールとして配置していないフィールドはコピーされません。
フォーム上に連結テキストボックスとして配置しておく必要があります。
表示させたくないなら、サイズを小さめにして、他のコントロールの背面に隠しておくといいでしょう。
「タブストップ」を「いいえ」にしておけば、タブキーで移動してもフォーカスしないのでユーザーは見ることができません。

2
hassy-hhh 2022/01/12 (水) 14:04:26 bf909@6eb0c

回答ありがとうございます。勉強になります。
テーブルのレコード自体をまるまるコピーして、新規レコードに貼り付ける方法はないでしょうか?

3

フォームのレコードソースがテーブルならば、

    Dim rs As DAO.Recordset    
    Set rs = Me.RecordsetClone
    rs.AddNew
    With Me.Recordset
        Dim i As Long
        For i = 1 To rs.Fields.Count - 1
            rs.Fields(i) = .Fields(i)
        Next
    End With
    rs.Update
    DoCmd.GoToRecord , , acLast

先頭フィールドがオートナンバー型のフィールドという前提です。

4
hassy-hhh 2022/01/13 (木) 13:40:32 bf909@6eb0c

ありがとうございます!やりたいことが完璧にできました!