

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をすると、レコードのコピーができます。
コードの書き方が間違っているのでしょうか?
ご教授よろしくお願いいたします!
No.8ベストアンサー
- 回答日時:
#4です
> いただいたページを見てみると、
> サブフォームのコピーでエラーになるとのこと。
> 私の場合はその前の段階の、メインフォームのレコードのコピーでつまづいております・・・。
参照先の処理(AccessClub の方)は
・メインをコピーした後で
・サブフォームの元テーブルに対して該当レコードをコピー
という流れになっています。
メインをコピーする
> メインフォームのレコードを新規レコードにコピーする
> DoCmd.RunCommand acCmdSelectRecord 'カレントレコードの選択
> DoCmd.RunCommand acCmdCopy '選択レコードのコピー
> DoCmd.GoToRecord , , acNewRec '新規レコードに移動
> ' DoEvents ' (必要に応じて)
> DoCmd.RunCommand acCmdPasteAppend 'コピーレコードの追加貼り付け
>
> DoCmd.RunCommand acCmdSaveRecord '保存
部分について、みてもらいたかったのですが・・・
で、上記の DoEvnts 部分を有効にしてみてどうなりますか?
(あれを確認していた際、2007 で、その時の最新状態になっていたと思います)
たびたびありがとうございます!
昨日
> ' DoEvents ' (必要に応じて)
を書き加えてやってみたのですが、
できなかったと思ったら・・・
有効にする( ' をはずす)のを忘れていたようです!
意味ない!
よく確認せずできないと答えてしまって申し訳ありませんでした。
おかげさまでやっとのことでめでたく
メインフォームのコピーができるようになりましたので
サブフォームのコピーのほうへうつりたいと思います。
教えていただいたサイト参考にします!
大変失礼しました&ありがとうございました!!
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
何度もありがとうございます!
>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での解決。
No.6
- 回答日時:
2007 を 導入したころ、この手のエラーに悩まされた記憶がありますが、
最近、なくなりました。
サービスパックを当ててみたらいかがですか?
現在はエラーの再現はできないのですが、
レコードを選択するとトラブルが起きた、と記憶しています。
単純に、
DoCmd.RunCommand acCmdSelectRecord 'レコードの選択
DoCmd.RunCommand acCmdCopy 'コピー
DoCmd.RunCommand acCmdPasteAppend '追加貼り付けを実行
ではどうなりますか?
ありがとうございます!
いただいたコードでやってみましたが同じエラーが出ました。
>サービスパックを当ててみたらいかがですか?
すみません、詳しくなくてこの作業がよく分からないのですが・・・
どうやったらいいんでしょうか?
参考サイト等あれば教えていただけるとうれしいです。
また、私が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
を試してみてください。
何度もありがとうございます!
コマンド名を「コマンド10」とし、
そのままコピペしてみましたが、だめでした・・・。
また何かお気づきの点ありましたらお願いいたします!
No.4
- 回答日時:
以下、参考にならないかもですが
Access2003にて、メインフォーム上に設置した「コピー」ボタンを
http://oshiete.goo.ne.jp/qa/6134714.html
の内容と、
そこに書かれているマルチ(リンクが切れたみたい)元である
No77233.サブフォームのレコードのコピーができない
http://www.accessclub.jp/bbs/0240/beginers77233. …
に書かれている内容で解決できますか?
(新規レコードへ行く時の記述は違いますけど)
後者での確認時(記事No : 77362 )メイン貼り付け時に 2046 のエラーになった・・・・
これが、質問者さんが言われている
> 「コマンドまたはアクション”追加貼り付け”は無効です」
であれば、
貼り付け前に、DoEvents を入れてみるとか・・・・
ただ、その際に他のイベントを取る事があったら、いろいろ考えなくては・・・
上記参照先を読まれると、
もしかしたら質問者さんの前の質問も解決できるかも
ありがとうございます!
このエラーについてさんざんネットで検索してきましたが
見たことのないページでした!
いただいたページを見てみると、
サブフォームのコピーでエラーになるとのこと。
私の場合はその前の段階の、メインフォームのレコードのコピーでつまづいております・・・。
また何かお気づきの点ありましたら教えてください!
ありがとうございました!
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のバージョンを明記されたらどうでしょうか?

ご回答ありがとうございます!
大変失礼しました。
Access2007を使用しています。
いただいたコードをコピペさせていただいたんですが・・・
やはり同じエラーが出てしまいまさいた。
また何かお気づきのことありましたらお願いいたします!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
access2000:フォームで入力した内容を新規レコードにコピー
その他(データベース)
-
アクセス 前レコード内容を、新レコードにコピー
Access(アクセス)
-
access2010 コマンドまたはアクション''は無効です。について
その他(ソフトウェア)
-
-
4
Accessでレコードの複製
Access(アクセス)
-
5
ACCESS VBA 追加貼り付けが無効
Access(アクセス)
-
6
Access サブフォームでの選択行の取得
その他(データベース)
-
7
ACCESSのサブフォームコピーについて
その他(Microsoft Office)
-
8
Accessでレコードを別テーブルへコピーするには
Access(アクセス)
-
9
MS.Access でサブフォーム付のフォームのレコードの複数コピーについて
Access(アクセス)
-
10
Accessのテーブルのフィールドに式を入れる方法
Access(アクセス)
-
11
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
12
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
13
Microsoft Access 2016でエラーが出る
Access(アクセス)
-
14
Access VBA acCmdSelectRecordについて
その他(データベース)
-
15
ACCESS フォームからサブフォームのデータを更新・入力したい
Access(アクセス)
-
16
ラベルとテキストボックスのグループ化を解除したい
Access(アクセス)
-
17
メインフォームとサブフォームのレコードを複製
Access(アクセス)
-
18
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
19
角丸四角形を描きたい
Excel(エクセル)
-
20
Access コンボボックスの値をクリアしたい。
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルメーカーのレコード複...
-
Accessでレコードの複製
-
MS.Access でサブフォーム付の...
-
Accessフォームで詳細内の任意...
-
ACCESSフォーム入力後の確定
-
Accessで経過日付に応じて色を...
-
ファイルメーカーProでレコード...
-
エクセルで、抽出したデータだ...
-
Access サブフォームでの選択行...
-
【AccessVBA】レコードセットOp...
-
未審査請求包袋抽出表作成とは...
-
ExcelのComboboxでマウスのスク...
-
入力した値をコンボボックスに...
-
PDFファイルから特定の文字を検...
-
Access2000 サブフォームのReco...
-
前のレコードの値を自動で入れたい
-
ACCESSのレポートにフォームの...
-
インデックスまたは主キーにはn...
-
Accessのコンボボックスでリス...
-
「パラメータが少なすぎます。3...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS 複数のフォームから同一...
-
Accessでレコードの複製
-
ACCESSフォーム入力後の確定
-
MS.Access でサブフォーム付の...
-
accessでオートナンバーを使わ...
-
Accessで経過日付に応じて色を...
-
Accessフォームで詳細内の任意...
-
AccessのRefresh・Requery・Rep...
-
アクセエスのレコードの更新をV...
-
access の 最終レコードの判定...
-
Accessの「Form_AfterUpd...
-
MSAccess ロック状態かどうかを...
-
アクセスのコンボボックスの内...
-
DoCmd.SearchForRecord が動か...
-
Access「レコードの保存」
-
ACCESSのレポートに関して
-
docmd.gotorecordを起動するには
-
新しいレコードへの移動時にト...
-
access2000で質問です。
-
ACCESS 単票形式フォームの新...
おすすめ情報