• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessでレコードの複製)

Accessでレコードの複製方法|エラーメッセージとコードの書き方を解説

このQ&Aのポイント
  • Accessでレコードを複製する方法について説明します。ボタンをクリックすると表示中のレコードをコピーして新規レコードへ追加する方法です。
  • DoCmd.RunCommandを使用してレコードの操作を行いますが、コードの書き方に間違いがある場合にはエラーメッセージが表示されます。
  • エラーメッセージ「コマンドまたはアクション”追加貼り付け”は無効です」と表示される場合は、DoCmd.RunCommand acCmdPasteAppendの使用方法に問題があります。修正方法としては、手動でctrl+Vを使用してレコードを追加することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.8

#4です > いただいたページを見てみると、 > サブフォームのコピーでエラーになるとのこと。 > 私の場合はその前の段階の、メインフォームのレコードのコピーでつまづいております・・・。 参照先の処理(AccessClub の方)は ・メインをコピーした後で ・サブフォームの元テーブルに対して該当レコードをコピー という流れになっています。 メインをコピーする > メインフォームのレコードを新規レコードにコピーする > DoCmd.RunCommand acCmdSelectRecord 'カレントレコードの選択 > DoCmd.RunCommand acCmdCopy '選択レコードのコピー > DoCmd.GoToRecord , , acNewRec '新規レコードに移動 > ' DoEvents ' (必要に応じて) > DoCmd.RunCommand acCmdPasteAppend 'コピーレコードの追加貼り付け > > DoCmd.RunCommand acCmdSaveRecord '保存 部分について、みてもらいたかったのですが・・・ で、上記の DoEvnts 部分を有効にしてみてどうなりますか? (あれを確認していた際、2007 で、その時の最新状態になっていたと思います)

masunona
質問者

お礼

たびたびありがとうございます! 昨日 > ' DoEvents ' (必要に応じて) を書き加えてやってみたのですが、 できなかったと思ったら・・・ 有効にする( ' をはずす)のを忘れていたようです! 意味ない! よく確認せずできないと答えてしまって申し訳ありませんでした。 おかげさまでやっとのことでめでたく メインフォームのコピーができるようになりましたので サブフォームのコピーのほうへうつりたいと思います。 教えていただいたサイト参考にします! 大変失礼しました&ありがとうございました!!

その他の回答 (8)

回答No.9

すみません、もうちょっと補足しておきます。 ■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

masunona
質問者

お礼

何度もありがとうございます! >DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 >DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70 >DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70 上記の方法はうまくいきませんでした・・・。 同じエラーが出てしまいました。 DAOは使ったことがなくて、未知の世界ですが 色々検索してるとよく出てくるので、いつかは勉強すべきだと思っています。 今後の参考にさせていただきます。 何度もご回答いただきありがとうございました!

回答No.7

ネット上で散見される対策は、 1、パッチ。(Access2007) 2、runCommandを使う(AccessXXXX) 3、手法を変える。 この3つのようです。 3の最も原始的な方法は、 1、変数にデータを代入。 2、新規レコードへ移動。 3、フォームの各フィールドへ変数を代入。 3の最も根本的な解決方法は、 複製関数の自作。 祈、1での解決。

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.6

2007 を 導入したころ、この手のエラーに悩まされた記憶がありますが、 最近、なくなりました。 サービスパックを当ててみたらいかがですか? 現在はエラーの再現はできないのですが、 レコードを選択するとトラブルが起きた、と記憶しています。 単純に、 DoCmd.RunCommand acCmdSelectRecord 'レコードの選択 DoCmd.RunCommand acCmdCopy 'コピー DoCmd.RunCommand acCmdPasteAppend '追加貼り付けを実行 ではどうなりますか?

masunona
質問者

お礼

ありがとうございます! いただいたコードでやってみましたが同じエラーが出ました。 >サービスパックを当ててみたらいかがですか? すみません、詳しくなくてこの作業がよく分からないのですが・・・ どうやったらいいんでしょうか? 参考サイト等あれば教えていただけるとうれしいです。 また、私がAccessで作成したシステムを、社内に配布しています。 その場合、全員がこの >サービスパックを当てる 作業をしなければならないんでしょうか?? Access自体の問題となれば、諦めるしかないんでしょうか。。。

回答No.5

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 を試してみてください。

masunona
質問者

お礼

何度もありがとうございます! コマンド名を「コマンド10」とし、 そのままコピペしてみましたが、だめでした・・・。 また何かお気づきの点ありましたらお願いいたします!

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.4

以下、参考にならないかもですが Access2003にて、メインフォーム上に設置した「コピー」ボタンを http://okwave.jp/qa/q6134714.html の内容と、 そこに書かれているマルチ(リンクが切れたみたい)元である No77233.サブフォームのレコードのコピーができない http://www.accessclub.jp/bbs/0240/beginers77233.html に書かれている内容で解決できますか? (新規レコードへ行く時の記述は違いますけど) 後者での確認時(記事No : 77362 )メイン貼り付け時に 2046 のエラーになった・・・・ これが、質問者さんが言われている > 「コマンドまたはアクション”追加貼り付け”は無効です」 であれば、 貼り付け前に、DoEvents を入れてみるとか・・・・ ただ、その際に他のイベントを取る事があったら、いろいろ考えなくては・・・ 上記参照先を読まれると、 もしかしたら質問者さんの前の質問も解決できるかも

masunona
質問者

お礼

ありがとうございます! このエラーについてさんざんネットで検索してきましたが 見たことのないページでした! いただいたページを見てみると、 サブフォームのコピーでエラーになるとのこと。 私の場合はその前の段階の、メインフォームのレコードのコピーでつまづいております・・・。 また何かお気づきの点ありましたら教えてください! ありがとうございました!

回答No.3

失礼!原因は、別! DoCmd.RunCommand acCmdPasteAppend でも動きますね!つまり、コード自体には何も問題ないことになります。

masunona
質問者

お礼

ありがとうございます! 原因は別にあるんですね。 手動では動くのにまったく同じ動作をコードに書くとできないなんて・・・ もう2週間も同じところでグルグル悩んでます。。。 何度もありがとうございました! また何かお気づきのことありましたらお願いいたします!

回答No.2

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のバージョンを明記されたらどうでしょうか?

masunona
質問者

お礼

ご回答ありがとうございます! 大変失礼しました。 Access2007を使用しています。 いただいたコードをコピペさせていただいたんですが・・・ やはり同じエラーが出てしまいまさいた。 また何かお気づきのことありましたらお願いいたします!

回答No.1

× DoCmd.RunCommand acCmdPasteAppend ○ DoCmd.RunCommand acCmdPaste でOKでした。

masunona
質問者

お礼

早速ありがとうございます! DoCmd.RunCommand acCmdPaste 上記ためしてみたのですが、 「”貼り付け”は無効です」 となり、エラーで出来ませんでした。。。 もしまた何かお気づきのことありましたら お願いいたします!

関連するQ&A