Access2003にて、メインフォーム上に設置した「コピー」ボタンを
Access2003にて、メインフォーム上に設置した「コピー」ボタンをクリックすると、メインフォームとサブフォーム9個のレコードを一括で新規レコードにコピーするVBAを作成しています。
ですが、ボタンをクリックすると、
「3164
フィールドを更新できません」
とメッセージが表示されて、メインとサブ1だけがコピーされ、サブ2~9はコピーされません。
テーブルの構成は以下のようになっています。
メイン(テーブル名:00メイン)
・計画書番号(オートナンバー型)※主キー
・コピーフラグ(数値型)
・コピー実行日(日付型)
・作成フラグ(数値型)
・作成日(日付型)
※この他40程フィールドがあります。
サブ1~9(テーブル名:01~09サブ)
・計画書番号(長整数型)※インデックスは「はい(重複なし)」
・レコード作成用番号(長整数型)
※この他各サブテーブルごとに、20~40程のフィールドがあります。
サブ1~9の計画書番号はメインの計画書番号とリレーションシップしています。
サブフォームに計画書番号を表示するようにしてみると、コピーボタンをクリックしたときサブ2だけがメインで取得した新しい計画書番号が表示されていて、サブ2~9はコピー元の計画書番号が表示されています。
以下にコピーボタンをクリックした時のコードとBeforeUpdate時のコードを記載します。
また、「Forms!メイン!サブ1.Form.レコード作成用番号 = Me.txt計画書No」の箇所はメインの新規作成時にサブ1~9にレコードを作成するようにしています。
(メイン作成と同時にサブにもレコードを作成したかったので・・・)
サブ2~9までのコピーができるようにするにはどうしたらよいのでしょうか?
よろしくお願いいたします。
Private Sub cmdコピー_click()
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.GoToRecord , , acNewRec
DoCmd.RunCommand acCmdPasteAppend
Me!コピーフラグ = 1
Me!コピー実行日 = Date
Me!サブ1.SetFocus
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.GoToRecord , , acNewRec
DoCmd.RunCommand acCmdPasteAppend
Me!サブ2のサブフォーム.SetFocus
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.GoToRecord , , acNewRec
DoCmd.RunCommand acCmdPasteAppend
※以下サブ3~9までサブ2と同じコードを記述しています。
MsgBox "レコードのコピーが完了しました。"
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim dlgret As Integer
dlgret = MsgBox("編集内容を保存しましすか?", vbQuestion + vbOKCancel, "保存確認")
If dlgret = vbCancel Then
Cancel = True
Else
'新規作成の場合、作成日フラグは既定値0のため1に変更
If Me!作成フラグ = 0 Then
Me!作成フラグ = 1
Me!作成日 = Date
If Me!コピーフラグ = 1 Then
Forms!メイン!サブ1.Form.Requery
Forms!メイン!サブ2.Form.Requery
※サブ3~9も同様にRequeryを行ないます。
Else
MsgBox "コピーフラグは" & Forms!メイン!コピーフラグ & "です。" & Chr(13) & _
"新規作成を実行します。"""
Forms!メイン!サブ1.Form.レコード作成用番号 = Me.txt計画書No
Forms!メイン!サブ2.Form.レコード作成用番号 = Me.txt計画書No
※サブ3~9も同様に処理します。
End If
Else
End If
End Sub
お礼
piroin654さん いろいろありがとうございます。 プロパティをよく見たところenter key入力時操作がフィールド行を追加になっていました それを既定にしたところ移動してくれました。
補足
piroin654さん ありがとうございます、 上記、代案を入れてみました、同じでした。 エラーも起こらず”失効有無”の所に文字も入力されず enterが利かなくなります、マウスで別な場所でクリック すると新規レコードに移ります、 ここが原因ではないのでしょうか?