ちょっと先の未来クイズ第4問

1.
アクセスで、モジュールやデザインを変更したフォームをエクスポートしたいのですが、エクスポート先のテーブルのデータに全く影響はないでしょうか。

2.
モジュールも一緒にエクスポートされると思いますが、エクスポート先のテーブルにないフィールドなどを記述していると、エラーが発生することになるでしょうか。

3.
複数(あるいは全て)のフォームを一括してエクスポートする方法はないでしょうか。

4.
特に注意すべき点があれば、合わせて教えてください。

  

A 回答 (7件)

1.フォームを一括してエクスポートする方法はないでしょうか


 データには影響ありません。

2.エクスポート先のテーブルにないフィールドなどを記述していると、エラーが発生することになるでしょうか。
 当然エラーになります。

3.複数(あるいは全て)のフォームを一括してエクスポートする方法はないでしょうか。
 確認したのは2003ですが、エクスポートは1つずつしかできませんが、インポートなら「全て選択」できるます。

4.特に注意すべき点があれば、合わせて教えてください。
 同じ名前のフォームやテーブルをインポートした場合、後からインポートしたオブジェクトの名前の後に「_1」が付くので、インポートしたのに変わっていないと勘違いすることがあります。
    • good
    • 0
この回答へのお礼

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

1と2はわかりました。

3.
 確認したのは2003ですが、エクスポートは1つずつしかできませんが、インポートなら「全て選択」できます。

アクセス97です。
古すぎますかね・・・。
「全て選択」メニューが見当たらないようなのでひとつづつエクスポートするしかないのでしょうね。

4.
 同じ名前のフォームやテーブルをインポートした場合、後からインポートしたオブジェクトの名前の後に「_1」が付くので、インポートしたのに変わっていないと勘違いすることがあります。

フォームなどの【名前だけ】が変わって上書きされる、ということですよね。
たとえば「AAA」という名前のフォーム名が「AAA_1」に変わる、ということでしょうか。
それとも、上書きされずに併存する状態でインポートされるのでしょうか。
  

お礼日時:2011/01/09 23:46

To No5 のレス(もはや死語?)につきまして。


あはは、やっぱり。(^^ゞ
レスありがとうございます。

怪答ご勘弁を。
削除対象かな?
退散します。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/01/12 15:59

#3の2箇所の



DoCmd.TransferDatabase acExport, "Microsoft Access", strPath, acForm, objNameIn, objNameIn

のところが貼り付けたときに字数の関係で
おかしくなっています。正確には、

Docmd以下の末尾にobjNameInがカンマで区切られて
二つ続きます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/01/12 15:59

#3です。

もし、既存のフォームがあれば
それを破棄して新たにフォームをエクスポート
したいというのであれば、コードを少し
変更しますが、そのあたりはいかがですか。

それから、#4さんへ
CurrentProjecプロパティはAccess2000以降です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/01/12 15:59

Access97で動くか全く分かりませんが (^^ゞ


参考にしてください(ならないかも?)
動くなら少し手直しすればいけますよね?

Sub test1()
'自MDBのフォーム一覧
Dim objFrm As AccessObject
For Each objFrm In CurrentProject.AllForms
Debug.Print objFrm.Name
Next objFrm
End Sub

Sub test2()
'他MDBのフォーム一覧・削除 ※バックアップを取るか不要のファイルでお試しを!
Dim appAcc As Access.Application
Dim objFrm As Object
Dim strPath As String
strPath = "c:\要らない.mdb"
Set appAcc = New Access.Application
appAcc.OpenCurrentDatabase strPath
For Each objFrm In appAcc.CurrentProject.AllForms
Debug.Print objFrm.Name
If objFrm.Name = "あのフォーム名" Then
appAcc.DoCmd.DeleteObject acForm, objFrm.Name
End If
Next objFrm
appAcc.CloseCurrentDatabase: Set appAcc = Nothing
End Sub
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/01/12 15:59

Access97では同じ名前のフォームがあると


エクスポートした場合、エラーが出る可能性が
あるかもしれないので、同じ名前のフォームが
ある場合はエクスポートしないようにしています。
同じ名前のフォームを置いてみたりして確認
してみてください。
このコードは他のバージョンのAccessでも使えます。
なお、他のバージョンで使用する場合はDAOにチェックを
入れてください。ADOより上位に設定するか、ADOの
チェックをはずしてください。


Sub cmdTransferFormA()
Dim dbIn As Database
Dim rsIn As Recordset
Dim dbOut As Database
Dim rsOut As Recordset
Dim strSQLIn As String
Dim strSQLOut As String
Dim strPath As String
Dim objNameIn As String
Dim objNameOut As String

strSQLIn = "Select Name From MSysObjects Where Type = -32768"
strSQLOut = "Select Name From MSysObjects Where Type = -32768"
strPath = "D:\sample.mdb"
Set dbIn = CurrentDb
Set rsIn = dbIn.OpenRecordset(strSQLIn)
Set dbOut = DBEngine.Workspaces(0).OpenDatabase(strPath)
Set rsOut = dbOut.OpenRecordset(strSQLOut)

If rsIn.RecordCount > 0 Then
rsIn.MoveFirst
Do Until rsIn.EOF
objNameIn = rsIn!Name
If rsOut.RecordCount > 0 Then
rsOut.MoveFirst
Do Until rsOut.EOF
If rsIn!Name = rsOut!Name Then
Exit Do
Else
DoCmd.TransferDatabase acExport, "Microsoft Access", strPath, acForm, objNameIn,
objNameIn
Exit Do
End If
rsOut.MoveNext
Loop
Else
DoCmd.TransferDatabase acExport, "Microsoft Access", strPath, acForm, objNameIn,
objNameIn
End If
rsIn.MoveNext
Loop
End If
rsIn.Close: Set rsIn = Nothing
rsOut.Close: Set rsOut = Nothing
dbIn.Close: Set dbIn = Nothing
dbOut.Close: Set dbOut = Nothing
End Sub
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/01/12 15:58

3.「全て選択」メニューが見当たらないようなのでひとつづつエクスポートするしかないのでしょうね。


 →2003でもエクスポートは1つずつです。モジュールを相手に渡すのではなく、インポートで相手側から最新のモジュールを貰うんです。

4.「たとえば「AAA」という名前のフォーム名が「AAA_1」に変わる、ということでしょうか。
それとも、上書きされずに併存する状態でインポートされるのでしょうか。」
 →「AAA_1」に変わるので、元の「AAA」と併存するので、それに気を付ける必要があるのです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/01/12 15:58

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