アプリ版:「スタンプのみでお礼する」機能のリリースについて

ACCESSのサブフォームコピーについて

お世話になります。色々検索してたのですがなかなか解決できず、教えて下さい。

下記のようなフォームがあります。
メインフォームにボタンを設置し、メインフォームとサブフォームを同時にコピーしたいです。

【メインフォーム】
ID(オートナンバー)
登録名
住所
電話番号
など

【サブフォーム】
SubID(オートナンバー)
ID(メインフォームと連結)
ライセンス数
開始日
など

メインフォームの「内容のコピーを作成」ボタンのクリック時の[イベント プロシージャ]に下記が記載してあります。
---
Private Sub 内容のコピーを作成_Click()
On Error GoTo Err_内容のコピーを作成_Click

Select Case MsgBox(srchXls & "◆内容のコピーを作成しますか?◆", vbOKCancel)
Case vbOK

DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70 'Paste Append

MsgBox (srchXls & Chr(13) & Chr(10) & "◆コピーを作成しました◆")

Err_内容のコピーを作成_Click:

Case Else
Exit Sub
End Select
End Sub
---

これではメインフォームのコピーしか出来ません。
サブフォームも一緒にコピーしたいのですが、どういった方法があるでしょうか。

宜しくお願いいたします。

A 回答 (17件中1~10件)

No.16です。



> 念のためテストデータで検証後に本データに反映させますので、
> 数日のタイムラグはありますので大丈夫です(^^)

とりあえず、それを聞いて安心しました。


・・・さて、以下の件ですが、

> フォーカスはサブフォームのレコードを貼り付けたところで止まっています。

前回回答した「フォーカス移動の対応」を入れる前にはエラーが
なかったことから考えても、改修部分での発生と思います。

とりあえず、思いつくパターンをこちらのサンプルで確認したところ
 a)「Me!」の直後の部分(IDやサブフォーム名)を、実際にはない
  「ID1」などにした場合:
  「2465」の当該フィールドがないとのエラー
 b)「Me.」の直後の部分(GotoPage)に、実際にはない「GotoPageA」
  などを指定した場合:
  コマンドボタンを押した直後にコンパイルエラー
 c)「Me!」の後に続いて、「.」で始まる「SetFocus」や「SourceObject」
  を、それぞれ「SetFocus1」や「SourceObject1」にした場合:
  「438」のサポートしていないとのエラー
という結果になりましたので、「c」の部分のスペルミスの可能性が
高いように思います。

・・・IDやサブフォームがコントロールであることをわかりやすくする
意味で、先頭に「Me!」をつけたのですが、実際には「Me!」はなくても
正しく動作します。
ですので、両者(IDとサブフォーム名)の「Me!」を削除(Deleteキーで
消去)した上で、コード表示画面のメニューから、「デバッグ(D)→
○○のコンパイル(L)」をクリックしてみてください。
「コンパイルエラー」のメッセージを『OK』をクリックして閉じると、
間違いがあった部分が反転表示されますので、そこが修正が必要な箇所
ということになります。
(「.SetFocus」「.SourceObject」の部分を削除後、IDやサブフォーム名
 の後ろに半角ピリオド「.」を入力すると、指定できるパラメータの候補
 が表示されるので、そこから選ぶのが一番確実です:
 予め「Me!」を削除しておかないと、この機能は働かないのでご注意を)


・・・もしも上記とは別のところでエラーが発生していた場合は、
そこに対して、同様の手順を試してみてください。
また、上の方法でコンパイルエラーが発生しなかった場合は、
コード冒頭の「On Error Goto エラー処理」の先頭に「'」を追加
して、独自のエラー処理を無効化してから、再度コピー処理を
実行してみてください。
(エラーメッセージに『デバッグ』というボタンが表示されるので、
 それをクリックすると、エラー箇所が黄色表示されます)
※メニューから「実行(R)→リセット(R)」を選択するか、ツール
 バーのリセットボタン(青い四角形)を押して黄色表示を解除
 した後、その行を改修します。

なお、もしもVBAに表示制限用のパスワードを設定している
場合は、予めパスワードを通しておかないと、エラーメッセージ
の『デバッグ』ボタンは押せないので、ご注意下さい。
(パスワードは、メニューで「ツール(T)→○○のプロパティ(E)」
 をクリックして表示されるダイアログの『保護』タブで設定と
 解除ができます: 一応、参考まで。)
「ACCESSのサブフォームコピーについて」の回答画像17
    • good
    • 0
この回答へのお礼

できました!!!
感動です(T▽T)
ありがとうございます!

エラーの原因は画像で頂いた、メインフォームのIDの名前が違いました。
変更した記憶もなく・・・。
数年前から積み重ねてきたファイルだったので、何かの時に編集したままになっていたのでしょう(汗

ともかく、思った通りの動作になりまして大変満足しております。
説明も分かりやすく、とても感謝してます。

ありがとうございました。

お礼日時:2010/05/19 20:33

No.14です。



> コピー後にメインフォームの一番左上に画面を移動したい
> のですが、可能でしょうか?

可能です。
・・・可能なんですが、その動作の検証のためにサンプルを
動かしてみたところ、動作に重大な欠陥が発生することが
わかりました(汗)

具体的には、2回目以降のコピーでエラーが発生し、画面上
はコピーされているように見えるのに、その状態でフォームを
閉じてから再度開くと、2回目のサブフォーム分のレコードが
なくなっている、という恐ろしいものです(汗)
大変申し訳ありません。

ただ、対処方法は既にわかっていて、またコードの改変幅は
小さいので、今回ご希望の動作と併せても、数行の改修で
済みますので、その点はご安心下さい(汗)

No.7のコードからの改修箇所と、改修後のコードは以下の
通りです(サブフォームのIDの書換部分):

【改修前】
   Me!サブテーブル.Form.Refresh
   '但し、前回回答により、以下に差し替え済みのはず
   'Me!(サブフォーム名).Form.Refresh

【改修後】
'※上記1行を削除し、以下のコードに差し替えます:
   Me!ID.SetFocus
   Me!(サブフォーム名).SourceObject = Me!(サブフォーム名).SourceObject
   Me.GotoPage 1, 0, 0


・・・以上です。
『改ページ』を入れていない限り、表示中のフォームの
領域が(何レコード目であるかには関係なく)1ページ目、
という数え方をされるので、「Me.GotoPage」の第1引数に
「1」を指定し、その左上隅の座標である「0, 0」を第2及び
第3引数に指定しています。
(『改ページ』は、フォームのデザインビューで、フォーム
 デザイン用のツールバーの中(『コマンドボタン』のボタン
 の隣)にあります:
 意図的に追加していない限り、気にしなくてOKです(汗))


なお、差し替え後の2行目のコードの右辺については、サブ
フォームの表示用フォーム(→今度はコントロールではなく、
「ソースオブジェクト」に指定しているフォームの名前の方)を
直接指定してもOKです:

【改修後・パターン2】
   Me!ID.SetFocus
   Me!(サブフォーム名).SourceObject = "SF_サブ"
   '右辺はダブルクォート(")で括る必要があります。
   Me.GotoPage 1, 0, 0


・・・以上です。
前回のコードで既に本番データの入力作業を実行されて
いないことを祈ります(汗)
重ねてお詫び致します。
(内容が内容だけに、本当にしゃれになりません・・・)

この回答への補足

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

サブレコードが消える件は、幸いまだWebを見ていませんでした。
念のためテストデータで検証後に本データに反映させますので、数日のタイムラグはありますので大丈夫です(^^)

「438:オブジェクトは、このプロパティまたはメソッドをサポートしていません。」

というエラーメッセージが出ました。
フォーカスはサブフォームのレコードを貼り付けたところで止まっています。

Me!ID.SetFocus
Me!サブフォームの表示コントロール名.SourceObject = Me!サブフォームの表示コントロール名.SourceObject
Me.GotoPage 1, 0, 0

ということですよね?
念のため【改修後・パターン2】も試してみましたが、同じエラーが出てしまいました。
ダブルクォートの中はサブフォーム名にしましたが。(ソースオブジェクトの方)

補足日時:2010/05/18 21:25
    • good
    • 3

>最初のメッセージボックスで「キャンセル」


>を押してもコピーが実行されるようです。

忘れていました。訂正しました。それから
コピーの順序を変えました。コードが複雑に
なるのであっさりと。

>あ、あと今気付いたのですが、メインレコードの
>最後のレコードを削除してしまうと(IDに欠番が
>出たすぐ後)サブレコードがコピーされないようです。
>これは、メインレコードの最後のID+1(つまりメイン
>レコードのコピー後のID)の値をいつも代入する、
>のような感じですることは出来ますでしょうか。

これはメインテーブルのIDがオートナンバーだから
と思いますが。データの削除を伴う場合がるときは
一般的には主キーこの場合はIDですが、を連続番号
を発行するようにして対応します。
しかし、いずれにしてもメインレコードだけを
削除するのではなく、メインレコードに紐付け
られたサブフォームのレコードも同時に削除
しないと幽霊レコードがサブテーブルに残る
ことになります。

>「i」とはどういった意味なんでしょうか。

コードの最初に Dim i As Long と宣言して
いるように、数値型(長整数型)の変数でこれに
数値を代入していろいろします。



それでは以下、訂正したコードです。



Private Sub コピー開始()
Dim db As Database
Dim rsm As Recordset
Dim rs As Recordset
Dim rst As Recordset
Dim i As Long


On Error GoTo Er_ha

Set db = CurrentDb
Set rs = db.OpenRecordset("サブテーブル", dbOpenDynaset)
Set rsm = db.OpenRecordset("メインテーブル", dbOpenDynaset)
Set rst = Me!サブフォーム表示コントロール名.Form.RecordsetClone

If MsgBox("◆内容のコピーを作成しますか?◆", vbOKCancel) = vbCancel Then
GoTo Er_ha

Else
rsm.MoveLast
i = rsm!ID

'サブフォームのデータのコピー
If rst.RecordCount > 0 Then
With rst
rst.MoveFirst
Do Until .EOF
rs.AddNew
'IDは必要ないと思われるのでコメントアウトしておきます。
'必要なら先頭の'をはずしてください。
rs![ID] = i + 1
rs![ライセンス数] = rst![ライセンス数]
rs![開始日] = rst![開始日]

'以下、他に項目があるならその他の項目を置き換えてください。
'必要なときは先頭の'をはずしてください
'同様にして他の項目を追加してください。

'rs![その他の項目] = rst![その他の項目]
rs.Update
rst.MoveNext
Loop

End With
Else
End If

'メインフォームのコピー
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70

MsgBox ("コピー終了しました")
DoCmd.RunCommand acCmdSaveRecord
End If
'エラー処理
Er_ha:
If Err.Number <> 0 Then
MsgBox (Err.Number & vbCrLf & Err.Description)
End If


rs.Close
Set rs = Nothing
rst.Close
Set rst = Nothing
rsm.Close
Set rsm = Nothing
db.Close
Set db = Nothing
End Sub



なお、レコードの削除と連続番号の発行方法については
必要なら提案します。その場合はテーブルのIDフィールドの
データ型の変更、コードの追加と変更が必要になります。
    • good
    • 0
この回答へのお礼

何回もとても親切に教えて頂いてありがとうございました。

結果、別の方法で解決しましたが、piroin654様には大変お世話になりました。

ありがとうございました。

お礼日時:2010/05/19 20:35

No.11です。



> どこかにサブフォームの表示コントロールに置き換える場所が
> ありましたらお教え下さい。

あ~・・・そういうことですか(汗)
「サブテーブル」という名前に引っ掛かりを感じてはいたんですが、
それはつまり、「サブフォームのレコードソースにしているテーブル」
ということだったんですね。

てっきり、サブフォームの表示コントロールの名前が「サブテーブル」
なのだと思っていました(汗)
すみませんが、No.7の回答で「サブテーブル」になっているところは
全て、サブフォームの表示コントロールの名前に置き換えてください。

【例】(コントロールの名前が「ライセンス情報」だった場合)
 <修正前>
 RecCnt = Me!サブテーブル.Form.RecordsetClone.RecordCount
 <修正後>
 RecCnt = Me!ライセンス情報.Form.RecordsetClone.RecordCount

いちいち更新するのは面倒だと思いますので、置き換えるコードの
どこか適当なところにカーソルを置いた状態でCtrl+Hキーを同時に
押して置換ダイアログを呼び出し、検索文字列と置換文字列を指定
の上、『対象』に「カレント プロシージャ(P)」を指定して、置換ボタン
をクリックして下さい。
(検索条件などを間違えた場合は、置換ダイアログを閉じた上で、
 Ctrl+Zキーの同時押しで元に戻せます)


・・・それと、No9の方への補足への横レスになりますが(汗)、
そこでサブフォーム側のIDが1だけ小さくなっているのは、メイン側
のレコードが、貼り付けただけで保存されていないのが原因です。

ですので、対処方法としては、単純に代入値を+1するのではなく、
メイン側の貼り付け後に「レコード保存」を追加するのが、根本的な
解決策となります。
(私がしたNo.7の回答で、メイン・サブそれぞれの複製のところで
 「RunCommand acCmdSaveRecord」を入れているのもそのため)
※DoMenuItemでの「レコードの保存」の引数がいくつになるかは、
  (RunCommandでやるのが正統ということもあり)調べていません。

そうしないと、もしもメイン側とサブ側のそれぞれのIDにリレーション
シップが組まれていて、参照整合性を設定していた場合(→今回の
事例は本来そうされているべき事案かと)、恐らくエラーが発生する
はずです。
(「テーブル'メイン'にリレーションシップが設定されたレコードが
 必要なので、レコードの追加や変更を行うことはできません」と
 いった感じで)


【参考まで】
リレーションシップ・参照整合性について:
http://www.relief.jp/itnote/archives/000497.php

リレーションシップの設定方法:
http://www.officepro.jp/access/relation/index3.h …

この回答への補足

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

出来ました!!!!
すごくうれしいです!!ありがとうございます(T▽T)
この方法でしたら欠番も大丈夫ですね。

あとひとつだけ良いでしょうか。
コピー後にメインフォームの一番左上に画面を移動したいのですが、可能でしょうか?
メインフォームには縦横にスクロールバーが出ていて、微妙に1画面に収まりきりません。
コピー後にサブフォーム(メインフォームの右下にあります)にフォーカスがあるので、
画面が右下に寄っていて、その都度左上までマウスで移動してメインを入力する感じになります。

左上が本当はいいのですが、難しければフォーカスの移動でもいいです。
メインフォームの"ID"に移動など。

宜しくお願いいたします。

補足日時:2010/05/17 21:38
    • good
    • 0

サブフォームのデータコピーのところです。


うまくいきますように。

この回答への補足

度々すみません、最初のメッセージボックスで「キャンセル」を押してもコピーが実行されるようです。

補足日時:2010/05/17 01:11
    • good
    • 0

>メインフォームのコピー後のIDより1つだけ小さい


>IDでサブフォームがコピーされています。

プログラムの中ほどの

>rs![ID] = i



rs![ID] = i + 1

としてください。

この回答への補足

できました!ありがとうございます!

ちなみに
>rs![ID] = i

の「i」とはどういった意味なんでしょうか。今後の為に覚えておきたいです。

あと、コピー後の画面にて、サブフォームにはコピー前のIDのレコードが表示されてしまいます。
メインのレコードを移動して戻ってくるとちゃんとコピー後のIDのレコードが表示されます。
サブレコードの再読み込み?のようなことをすればコピー後にすぐ表示されるような気がするのですが、やりようはありますでしょうか。
このままだと、コピー後すぐにサブレコードを編集してしまうと前のIDのものを編集してしまい、間違いのもとになりそうです。

あ、あと今気付いたのですが、メインレコードの最後のレコードを削除してしまうと(IDに欠番が出たすぐ後)サブレコードがコピーされないようです。
これは、メインレコードの最後のID+1(つまりメインレコードのコピー後のID)の値をいつも代入する、のような感じですることは出来ますでしょうか。
それか他に解決方法がありますでしょうか。

何回も度々恐れ入りますが宜しくお願いいたします。

補足日時:2010/05/17 01:01
    • good
    • 0

No.7です。



> 「サブテーブル」の部分を本物のサブテーブルの名前にする
> だけだと思うのですが、それで合っていますでしょうか。

それで問題ないはずです。
(敢えて挙げるなら「ID」もですが、これは既にそちらと同名のはず)

こちらのサンプルで、一旦サブフォームの名前を変えて実行したところ、
同じ「Err.Number=2465」のエラーが発生しましたので、「サブテーブル」
という名前が、実際にフォームで使われているものと合っていない、
ということで間違いないものと思います。

なお、ここで使用する名前は、サブフォームのプロパティシートの
『その他』タブにある『名前』欄に表示されるものの方になります。
『データ』タブの『ソースオブジェクト』欄に表示される方ではない
ので、ご注意下さい。
(双方が同じ場合は、問題ありません)

また、具体的にどの行がエラーを起こしているのかを確認したい
場合は、前回提示したコードの先頭の「On Error~」の頭に「'」を
追加して独自のエラー処理を無効にして、再度処理を実行して
みてください。
(エラーメッセージ内に表示される、『デバッグ』ボタンをクリックする
 ことで、該当行を黄色表示させることができます:
 VBAに表示用のパスワードが掛かっている場合は、先に認証を
 通しておかないと、同ボタンは使用できないのでご注意下さい)
※今回はメッセージ内で「サブテーブル」という名前が表示されている
 ので、そこまでする必要はないかと思いますが、今後の参考まで。


> 旧バージョンとはACCESSのことでしょうか。。

はい、Accessのことです。
Access2003のDoMenuItemのヘルプには、以下の説明があります:

> メモ Access 97 で、DoMenuItem メソッドは RunCommand メソッド
> に置き換えられました。DoMenuItem メソッドは、以前のバージョンの
> Access との互換性を保つためにのみ、このバージョンに含まれています。

Access97はAccess2000の前ですから、Access2000でも推奨されるのは
RunCommandメソッドになりますので、置き換えました。

組み込み定数については、以下のようなサイトもありますので参考まで:
http://www.accessclub.jp/runcommand/


> サブフォームはデータシートでなければだめでしょうか。。

失礼、言葉が足りていませんでした(汗)
「もしテーブルを直接使用していたなら、フォームで同様の見た目をした
ものもあります(=データシート型)」という意味です。
元からフォームを使用されているのでしたら、それで問題ありません。


・・・長くなりましたが(汗)、以上です。

この回答への補足

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

>なお、ここで使用する名前は、サブフォームのプロパティシートの
>『その他』タブにある『名前』欄に表示されるものの方になります。
>『データ』タブの『ソースオブジェクト』欄に表示される方ではない
>ので、ご注意下さい。

こちらですが、サブフォームの表示コントロールのことでしょか?
教えて頂いた式の中にサブフォームの表示コントロールを記載するところがありましたでしょうか?
どこかにサブフォームの表示コントロールに置き換える場所がありましたらお教え下さい。

宜しくお願いいたします。

補足日時:2010/05/16 18:47
    • good
    • 0

たぶん、データはコピーと表示ができると思いますが、


フィールドが100あると聞いてあわててしまい
ました。必要なものも抜かしていたかもしれ
ません。長々とした回答で申し訳ないです。
まだ、油断はできないのですが、何かあれば
メッセージを送ってください。
    • good
    • 0

訂正しました。

どうですか。


Private Sub mcdコピー開始_Click()
Dim db As Database
Dim rsm As Recordset
Dim rs As Recordset
Dim rst As Recordset
Dim i As Long


On Error GoTo Er_ha
Set db = CurrentDb
Set rs = db.OpenRecordset("サブテーブル", dbOpenDynaset)
Set rsm = db.OpenRecordset("メインテーブル", dbOpenDynaset)
Set rst = Me!サブフォーム表示コントロール名.Form.RecordsetClone

'MsgBoxで引数たとえばvbOKCancelなどを設定するときは()でかこいません
MsgBox "◆内容のコピーを作成しますか?◆", vbOKCancel
If vbOK Then
'メインフォームのデータのコピー

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

rsm.MoveLast
i = rsm!ID


'サブフォームのデータのコピー
If rst.RecordCount > 0 Then
With rst
rst.MoveFirst
Do Until .EOF
rs.AddNew
'IDは必要ないと思われるのでコメントアウトしておきます。
'必要なら先頭の'をはずしてください。
rs![ID] = i
rs![ライセンス数] = rst![ライセンス数]
rs![開始日] = rst![開始日]

'以下、他に項目があるならその他の項目を置き換えてくださ

い。
'必要なときは先頭の'をはずしてください
'同様にして他の項目を追加してください。

'rs![その他の項目] = rst![その他の項目]
rs.Update
rst.MoveNext
Loop

'MsgBox ("サブフォームのコピー終了")
End With
Else
' MsgBox ("サブフォームにレコードがありません。")
End If
MsgBox ("コピー終了しました")
End If
'エラー処理
Er_ha:
If Err.Number <> 0 Then
MsgBox (Err.Number & vbCrLf & Err.Description)
End If


rs.Close
Set rs = Nothing
rst.Close
Set rst = Nothing
rsm.Close
Set rsm = Nothing
db.Close
Set db = Nothing
End Sub

この回答への補足

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

非常におしいです!
メインフォームのコピー後のIDより1つだけ小さいIDでサブフォームがコピーされています。

コピー前メインID=サブID=12659
コピー後メインID=16989、サブID=16988

おしいです!
これの解決方法ありますでしょうか。

補足日時:2010/05/16 18:53
    • good
    • 0

最初の回答の"この回答への補足"で、


[サブフォームの表示コントロール]の名前を
サブフォームと同じにした、ということですが
このようにすると何かと混乱のもとになるので
例えば、サブフォームの名前が
サブフォーム1ならば、コントロールの
名前は違う名前、たとえばサブフォーム1sub
あるいはobjサブフォーム1のように変えてください。
ときにはコードが動きません。サブフォームの
データが取れないのもそのあたりにあります。

提示したコードでは

Set rst = Me!サブフォーム表示コントロール名.Form.RecordsetClone

の部分も変更します。

それから、

>メインテーブルのフィールドが100を超える為、
>教えて頂いたように行数を足していくのは
>現実的ではありません。

このようなことは最初に情報をくださいませ。

では、du-samaさんが最初に提示したコードを
そのまま利用して、以下のようにします。



Private Sub mcdコピー開始_Click()
Dim db As Database
Dim rsm As Recordset
Dim rs As Recordset
Dim rst As Recordset
Dim i As Integer


On Error GoTo Er_ha
Set db = CurrentDb
Set rs = db.OpenRecordset("サブテーブル", dbOpenDynaset)
'サブフォーム表示コントロール名は変更してください。
Set rst = Me!サブフォーム表示コントロール名.Form.RecordsetClone

'MsgBoxで引数たとえばvbOKCancelなどを設定するときは()でかこいません
MsgBox "◆内容のコピーを作成しますか?◆", vbOKCancel
If vbOK Then
'メインフォームのデータのコピー

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

'サブフォームのデータのコピー
If rst.RecordCount > 0 Then
With rst
rst.MoveFirst
Do Until .EOF
rs.AddNew
'IDは必要ないと思われるのでコメントアウトしておきます。
'必要なら先頭の'をはずしてください。
'rs![ID] = rst![ID]
rs![ライセンス数] = rst![ライセンス数]
rs![開始日] = rst![開始日]

'以下、他に項目があるならその他の項目を置き換えてください。
'必要なときは先頭の'をはずしてください
'同様にして他の項目を追加してください。

'rs![その他の項目] = rst![その他の項目]
rs.Update
rst.MoveNext
Loop
End With
Else
End If
MsgBox ("コピー終了しました")
End If
'エラー処理
Er_ha:
If Err.Number <> 0 Then
MsgBox (Err.Number & vbCrLf & Err.Description)
End If


rs.Close
Set rs = Nothing
rst.Close
Set rst = Nothing
db.Close
Set db = Nothing
End Sub

この回答への補足

メインフォームとサブフォームがコピーされましたが、'サブフォームのデータのコピー
のところでIDをコピーしないようにすると、サブレコード自体はコピーされているようですが、IDが空白の為、コピー後のメインフォームに埋め込まれたサブフォームに表示されません。
IDをコピーするように’を外したところ、やはりコピー前のIDと同じになってしまいました。

メインコピー後のIDを代入する必要がありそうですが・・・。頂いた式で普通は出来るんですよね。。困りました。
今更ですが、ACCESS2000です。何か関係あるでしょうか。。

補足日時:2010/05/15 23:53
    • good
    • 0

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

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


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