dポイントプレゼントキャンペーン実施中!

Accessで、ボタンをクリックすると
表示させているレコードをコピーして複製したいです。
以下のようにコードを書いてみたのですが、
「コマンドまたはアクション”追加貼り付け”は無効です」
となってしまいます。

DoCmd.RunCommand acCmdSelectRecord 'レコードの選択
DoCmd.RunCommand acCmdCopy 'コピー
DoCmd.RunCommand acCmdRecordsGoToNew '新規レコードへ
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPasteAppend '追加貼り付けを実行

ちなみに
DoCmd.RunCommand acCmdPasteAppend

DoCmd.RunCommand acCmdPaste
に修正しても
「コマンドまたはアクション”貼り付け”は無効です」
となって、エラーになってしまいます。

そこで、以下のようにコードを省略して
DoCmd.RunCommand acCmdSelectRecord 'レコードの選択
DoCmd.RunCommand acCmdCopy 'コピー
DoCmd.RunCommand acCmdRecordsGoToNew '新規レコードへ
DoCmd.RunCommand acCmdSelectRecord
ここで、手動で、ctrl+Vをすると、レコードのコピーができます。

コードの書き方が間違っているのでしょうか?
ご教授よろしくお願いいたします!

A 回答 (9件)

#4です



> いただいたページを見てみると、
> サブフォームのコピーでエラーになるとのこと。
> 私の場合はその前の段階の、メインフォームのレコードのコピーでつまづいております・・・。

参照先の処理(AccessClub の方)は
・メインをコピーした後で
・サブフォームの元テーブルに対して該当レコードをコピー
という流れになっています。

メインをコピーする

> メインフォームのレコードを新規レコードにコピーする
> DoCmd.RunCommand acCmdSelectRecord 'カレントレコードの選択
> DoCmd.RunCommand acCmdCopy '選択レコードのコピー
> DoCmd.GoToRecord , , acNewRec '新規レコードに移動
> ' DoEvents ' (必要に応じて)
> DoCmd.RunCommand acCmdPasteAppend 'コピーレコードの追加貼り付け
>
> DoCmd.RunCommand acCmdSaveRecord '保存

部分について、みてもらいたかったのですが・・・
で、上記の DoEvnts 部分を有効にしてみてどうなりますか?

(あれを確認していた際、2007 で、その時の最新状態になっていたと思います)
    • good
    • 0
この回答へのお礼

たびたびありがとうございます!

昨日
> ' DoEvents ' (必要に応じて)
を書き加えてやってみたのですが、
できなかったと思ったら・・・

有効にする( ' をはずす)のを忘れていたようです!
意味ない!

よく確認せずできないと答えてしまって申し訳ありませんでした。

おかげさまでやっとのことでめでたく
メインフォームのコピーができるようになりましたので
サブフォームのコピーのほうへうつりたいと思います。
教えていただいたサイト参考にします!

大変失礼しました&ありがとうございました!!

お礼日時:2013/08/27 09:25

すみません、もうちょっと補足しておきます。



■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
    • good
    • 0
この回答へのお礼

何度もありがとうございます!

>DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
>DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
>DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70

上記の方法はうまくいきませんでした・・・。
同じエラーが出てしまいました。

DAOは使ったことがなくて、未知の世界ですが
色々検索してるとよく出てくるので、いつかは勉強すべきだと思っています。
今後の参考にさせていただきます。

何度もご回答いただきありがとうございました!

お礼日時:2013/08/27 09:55

ネット上で散見される対策は、



1、パッチ。(Access2007)
2、runCommandを使う(AccessXXXX)
3、手法を変える。

この3つのようです。

3の最も原始的な方法は、

1、変数にデータを代入。
2、新規レコードへ移動。
3、フォームの各フィールドへ変数を代入。

3の最も根本的な解決方法は、

複製関数の自作。

祈、1での解決。
    • good
    • 0

2007 を 導入したころ、この手のエラーに悩まされた記憶がありますが、


最近、なくなりました。

サービスパックを当ててみたらいかがですか?

現在はエラーの再現はできないのですが、
レコードを選択するとトラブルが起きた、と記憶しています。

単純に、

DoCmd.RunCommand acCmdSelectRecord 'レコードの選択
DoCmd.RunCommand acCmdCopy 'コピー
DoCmd.RunCommand acCmdPasteAppend '追加貼り付けを実行

ではどうなりますか?
    • good
    • 0
この回答へのお礼

ありがとうございます!
いただいたコードでやってみましたが同じエラーが出ました。

>サービスパックを当ててみたらいかがですか?
すみません、詳しくなくてこの作業がよく分からないのですが・・・
どうやったらいいんでしょうか?
参考サイト等あれば教えていただけるとうれしいです。

また、私がAccessで作成したシステムを、社内に配布しています。
その場合、全員がこの
>サービスパックを当てる
作業をしなければならないんでしょうか??

Access自体の問題となれば、諦めるしかないんでしょうか。。。

お礼日時:2013/08/26 16:24

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

を試してみてください。
    • good
    • 0
この回答へのお礼

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

また何かお気づきの点ありましたらお願いいたします!

お礼日時:2013/08/26 16:19

以下、参考にならないかもですが



Access2003にて、メインフォーム上に設置した「コピー」ボタンを
http://oshiete.goo.ne.jp/qa/6134714.html

の内容と、
そこに書かれているマルチ(リンクが切れたみたい)元である

No77233.サブフォームのレコードのコピーができない
http://www.accessclub.jp/bbs/0240/beginers77233. …

に書かれている内容で解決できますか?
(新規レコードへ行く時の記述は違いますけど)

後者での確認時(記事No : 77362 )メイン貼り付け時に 2046 のエラーになった・・・・
これが、質問者さんが言われている
> 「コマンドまたはアクション”追加貼り付け”は無効です」
であれば、
貼り付け前に、DoEvents を入れてみるとか・・・・
ただ、その際に他のイベントを取る事があったら、いろいろ考えなくては・・・


上記参照先を読まれると、
もしかしたら質問者さんの前の質問も解決できるかも
    • good
    • 0
この回答へのお礼

ありがとうございます!

このエラーについてさんざんネットで検索してきましたが
見たことのないページでした!

いただいたページを見てみると、
サブフォームのコピーでエラーになるとのこと。
私の場合はその前の段階の、メインフォームのレコードのコピーでつまづいております・・・。

また何かお気づきの点ありましたら教えてください!
ありがとうございました!

お礼日時:2013/08/26 16:21

失礼!原因は、別!



DoCmd.RunCommand acCmdPasteAppend

でも動きますね!つまり、コード自体には何も問題ないことになります。
    • good
    • 0
この回答へのお礼

ありがとうございます!

原因は別にあるんですね。
手動では動くのにまったく同じ動作をコードに書くとできないなんて・・・
もう2週間も同じところでグルグル悩んでます。。。

何度もありがとうございました!
また何かお気づきのことありましたらお願いいたします!

お礼日時:2013/08/26 14:15

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のバージョンを明記されたらどうでしょうか?
「Accessでレコードの複製」の回答画像2
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

大変失礼しました。
Access2007を使用しています。

いただいたコードをコピペさせていただいたんですが・・・
やはり同じエラーが出てしまいまさいた。

また何かお気づきのことありましたらお願いいたします!

お礼日時:2013/08/26 14:13

× DoCmd.RunCommand acCmdPasteAppend


○ DoCmd.RunCommand acCmdPaste

でOKでした。
    • good
    • 0
この回答へのお礼

早速ありがとうございます!

DoCmd.RunCommand acCmdPaste
上記ためしてみたのですが、
「”貼り付け”は無効です」
となり、エラーで出来ませんでした。。。

もしまた何かお気づきのことありましたら
お願いいたします!

お礼日時:2013/08/26 13:34

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

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


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