- ベストアンサー
Accessでレコードの複製方法|エラーメッセージとコードの書き方を解説
- Accessでレコードを複製する方法について説明します。ボタンをクリックすると表示中のレコードをコピーして新規レコードへ追加する方法です。
- DoCmd.RunCommandを使用してレコードの操作を行いますが、コードの書き方に間違いがある場合にはエラーメッセージが表示されます。
- エラーメッセージ「コマンドまたはアクション”追加貼り付け”は無効です」と表示される場合は、DoCmd.RunCommand acCmdPasteAppendの使用方法に問題があります。修正方法としては、手動でctrl+Vを使用してレコードを追加することができます。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
#4です > いただいたページを見てみると、 > サブフォームのコピーでエラーになるとのこと。 > 私の場合はその前の段階の、メインフォームのレコードのコピーでつまづいております・・・。 参照先の処理(AccessClub の方)は ・メインをコピーした後で ・サブフォームの元テーブルに対して該当レコードをコピー という流れになっています。 メインをコピーする > メインフォームのレコードを新規レコードにコピーする > DoCmd.RunCommand acCmdSelectRecord 'カレントレコードの選択 > DoCmd.RunCommand acCmdCopy '選択レコードのコピー > DoCmd.GoToRecord , , acNewRec '新規レコードに移動 > ' DoEvents ' (必要に応じて) > DoCmd.RunCommand acCmdPasteAppend 'コピーレコードの追加貼り付け > > DoCmd.RunCommand acCmdSaveRecord '保存 部分について、みてもらいたかったのですが・・・ で、上記の DoEvnts 部分を有効にしてみてどうなりますか? (あれを確認していた際、2007 で、その時の最新状態になっていたと思います)
その他の回答 (8)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
すみません、もうちょっと補足しておきます。 ■Access97の書き方。 DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70 Access2007で動作しても、これは邪道ですが・・・。 ■DAOの一例。 現実問題は、主キーをカウントアップしたり複製にも色々と操作が必要。 ですから、DAO(ADO)による複製もありかと・・・。 Private Sub コマンド11_Click() On Error GoTo Err_コマンド11_Click Dim I As Integer Dim J As Integer Dim Datas As String Dim rst As DAO.Recordset ' ----------------------------------- ' Recordset の作成 ' ----------------------------------- Set rst = Me.Recordset.Clone ' ----------------------------------- ' Datas へのフィールドデータの代入 ' ----------------------------------- J = rst.Fields.Count - 1 For I = 0 To J Datas = Datas & rst.Fields(I).Value & "|" Next I ' ----------------------------------- ' データの複製 ' ----------------------------------- rst.AddNew For I = 0 To J rst.Fields(I).Value = CutStr(Datas, "|", I + 1) Next I rst.Update ' ----------------------------------- ' フォームの更新 ' ----------------------------------- Me.Requery ' ----------------------------------- ' Recordset の破棄 ' ----------------------------------- rst.Close Set rst = Nothing Exit_コマンド11_Click: Exit Sub Err_コマンド11_Click: MsgBox Err.Description Resume Exit_コマンド11_Click End Sub Public Function CutStr(ByVal Text As String, ByVal Separator As String, ByVal N As Integer) As String Dim strDatas() As String strDatas = Split("" & Separator & Text, Separator, , 0) CutStr = strDatas(N * Abs(N <= UBound(strDatas))) End Function
お礼
何度もありがとうございます! >DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 >DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70 >DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70 上記の方法はうまくいきませんでした・・・。 同じエラーが出てしまいました。 DAOは使ったことがなくて、未知の世界ですが 色々検索してるとよく出てくるので、いつかは勉強すべきだと思っています。 今後の参考にさせていただきます。 何度もご回答いただきありがとうございました!
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
ネット上で散見される対策は、 1、パッチ。(Access2007) 2、runCommandを使う(AccessXXXX) 3、手法を変える。 この3つのようです。 3の最も原始的な方法は、 1、変数にデータを代入。 2、新規レコードへ移動。 3、フォームの各フィールドへ変数を代入。 3の最も根本的な解決方法は、 複製関数の自作。 祈、1での解決。
- m3_maki
- ベストアンサー率64% (296/460)
2007 を 導入したころ、この手のエラーに悩まされた記憶がありますが、 最近、なくなりました。 サービスパックを当ててみたらいかがですか? 現在はエラーの再現はできないのですが、 レコードを選択するとトラブルが起きた、と記憶しています。 単純に、 DoCmd.RunCommand acCmdSelectRecord 'レコードの選択 DoCmd.RunCommand acCmdCopy 'コピー DoCmd.RunCommand acCmdPasteAppend '追加貼り付けを実行 ではどうなりますか?
お礼
ありがとうございます! いただいたコードでやってみましたが同じエラーが出ました。 >サービスパックを当ててみたらいかがですか? すみません、詳しくなくてこの作業がよく分からないのですが・・・ どうやったらいいんでしょうか? 参考サイト等あれば教えていただけるとうれしいです。 また、私がAccessで作成したシステムを、社内に配布しています。 その場合、全員がこの >サービスパックを当てる 作業をしなければならないんでしょうか?? Access自体の問題となれば、諦めるしかないんでしょうか。。。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
Option Compare Database Private Sub コマンド10_Click() On Error GoTo Err_コマンド10_Click RunCommand acCmdSelectRecord 'レコードの選択 RunCommand acCmdCopy 'コピー RunCommand acCmdRecordsGoToNew '新規レコードへ RunCommand acCmdSelectRecord RunCommand acCmdPasteAppend '追加貼り付けを実行 Exit_コマンド10_Click: Exit Sub Err_コマンド10_Click: MsgBox Err.Description Resume Exit_コマンド10_Click End Sub を試してみてください。
お礼
何度もありがとうございます! コマンド名を「コマンド10」とし、 そのままコピペしてみましたが、だめでした・・・。 また何かお気づきの点ありましたらお願いいたします!
- 30246kiku
- ベストアンサー率73% (370/504)
以下、参考にならないかもですが Access2003にて、メインフォーム上に設置した「コピー」ボタンを http://okwave.jp/qa/q6134714.html の内容と、 そこに書かれているマルチ(リンクが切れたみたい)元である No77233.サブフォームのレコードのコピーができない http://www.accessclub.jp/bbs/0240/beginers77233.html に書かれている内容で解決できますか? (新規レコードへ行く時の記述は違いますけど) 後者での確認時(記事No : 77362 )メイン貼り付け時に 2046 のエラーになった・・・・ これが、質問者さんが言われている > 「コマンドまたはアクション”追加貼り付け”は無効です」 であれば、 貼り付け前に、DoEvents を入れてみるとか・・・・ ただ、その際に他のイベントを取る事があったら、いろいろ考えなくては・・・ 上記参照先を読まれると、 もしかしたら質問者さんの前の質問も解決できるかも
お礼
ありがとうございます! このエラーについてさんざんネットで検索してきましたが 見たことのないページでした! いただいたページを見てみると、 サブフォームのコピーでエラーになるとのこと。 私の場合はその前の段階の、メインフォームのレコードのコピーでつまづいております・・・。 また何かお気づきの点ありましたら教えてください! ありがとうございました!
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
失礼!原因は、別! DoCmd.RunCommand acCmdPasteAppend でも動きますね!つまり、コード自体には何も問題ないことになります。
お礼
ありがとうございます! 原因は別にあるんですね。 手動では動くのにまったく同じ動作をコードに書くとできないなんて・・・ もう2週間も同じところでグルグル悩んでます。。。 何度もありがとうございました! また何かお気づきのことありましたらお願いいたします!
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
Option Compare Database Private Sub コマンド10_Click() On Error GoTo Err_コマンド10_Click 'DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 'DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70 'DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70 'c DoCmd.RunCommand acCmdSelectRecord 'レコードの選択 DoCmd.RunCommand acCmdCopy 'コピー DoCmd.RunCommand acCmdRecordsGoToNew '新規レコードへ DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdPaste '追加貼り付けを実行 Exit_コマンド10_Click: Exit Sub Err_コマンド10_Click: MsgBox Err.Description Resume Exit_コマンド10_Click End Sub これでOK! 添付写真を参照されてみてください。 PS、Accessのバージョンを明記されたらどうでしょうか?
お礼
ご回答ありがとうございます! 大変失礼しました。 Access2007を使用しています。 いただいたコードをコピペさせていただいたんですが・・・ やはり同じエラーが出てしまいまさいた。 また何かお気づきのことありましたらお願いいたします!
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
× DoCmd.RunCommand acCmdPasteAppend ○ DoCmd.RunCommand acCmdPaste でOKでした。
お礼
早速ありがとうございます! DoCmd.RunCommand acCmdPaste 上記ためしてみたのですが、 「”貼り付け”は無効です」 となり、エラーで出来ませんでした。。。 もしまた何かお気づきのことありましたら お願いいたします!
お礼
たびたびありがとうございます! 昨日 > ' DoEvents ' (必要に応じて) を書き加えてやってみたのですが、 できなかったと思ったら・・・ 有効にする( ' をはずす)のを忘れていたようです! 意味ない! よく確認せずできないと答えてしまって申し訳ありませんでした。 おかげさまでやっとのことでめでたく メインフォームのコピーができるようになりましたので サブフォームのコピーのほうへうつりたいと思います。 教えていただいたサイト参考にします! 大変失礼しました&ありがとうございました!!