実現したいこと
ACCESSにてサブフォーム付きのフォームを新規ページに丸ごと複製したい。
前提
このたびはお世話になります。
vbaのコピー&ペーストについてです。
サブフォーム付きのレコードを丸々新規レコードにコピーする方法を探しております。
まず、親フォームをコピー→新規レコードに複製
そのあと、元レコードに戻って、サブフォームに移動→コピー(ここまでは作動しております)
新規レコードに戻って、サブフォーム移動→コピー
↑
このタイミングで、サブフォームの内容が反映されません。
ちなみにコピー内容はエクセルにペーストしてみたところ、ちゃんとコピーされておりました。
発生している問題・エラーメッセージ
サブフォームにいくつか更新後処理項目があり、それぞれのプロシージャがあるのですが、
これらのvbaに強制的にとばされていることがわかりました。
そして、すべての更新後処理の項目をサブフォームのデータ数分周回した後、再び元のvbaに戻ってきて一連のプログラムが終わるようなことになっております(この手順ですとサブフォームの内容は反映されます)。
ですがステップインでなく実際に実行すると、サブフォームの内容は白紙のままで止まってしまいます。
サブフォームの内容をコピペするにはどのようにすればよいでしょうか?
該当のソースコード
◆親フォームのコピペ
DoCmd.RunCommand acCmdSelectRecord 'レコードの選択
DoCmd.RunCommand acCmdCopy 'コピー
DoCmd.RunCommand acCmdRecordsGoToNew '新規レコードへ
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste '貼り付けを実行
◆コピー元のレコードに移動
Dim rst As Recordset
Dim varBookMark As Variant
Set rst = Me.Recordset 'フォームのレコードセットを変数にセットします
varBookMark = rst.Bookmark 'レコードセットのブックマークを取得します
Me.Requery'フォームを再クエリーします
rst.Bookmark = varBookMark 'カレントレコードを保存されているブックマークに設定します
(T’s Wareさんより引用)
◆元のサブフォームをコピー
On Error Resume Next
'再描画を停止
Echo False
'サブフォームにフォーカスを移動
Me!サブフォーム.SetFocus
'すべてのレコードを選択
DoCmd.RunCommand acCmdSelectAllRecords
'[コピー]を実行
DoCmd.RunCommand acCmdCopy
'再描画を再開
Echo True
◆Me.作業日.SetFocus’親フォームに移動→コピーした新規親フォームに移動
DoCmd.RunCommand acCmdRecordsGoToLast
Me!サブフォーム.SetFocus
DoCmd.RunCommand acCmdRecordsGoToNew '新規レコードへ
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste '貼り付けを実行
↑ここでトラブルが起きています。更新処理のプロシージャに飛ばされます。
Me.作業日.SetFocus
Me.Refresh
試したこと
デバッグのステップインで調べてみたところ、
すべての更新後処理の項目をサブフォームのデータ数分周回した後、再び元のvbaに戻ってきて一連のプログラムが終わるようなことになっております(ちなみに、この手順ですとサブフォームの内容は反映されます)。
補足情報(FW/ツールのバージョンなど)
使用環境
ウインドウズ10
Access2016
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/03/07 05:08 編集
2023/03/07 06:16
2023/03/07 07:32
2023/03/07 07:57 編集
2023/03/07 13:45
2023/03/08 00:31
2023/03/08 00:51
2023/03/08 01:42
2023/03/08 12:00