- ベストアンサー
マイクロソフトアクセス2007
あるフォルダにエクセルのファイル"A"があります。 この"A"はほぼ毎日更新され内容が新しくなっていきます。 アクセスで、このエクセルのファイルをインポートし、あるテーブルの最後のレコードの下に追加したいのですが、クリック1つでこの動作を行える様にしたいです。 しかし、この"A"が以前インポートした時から更新されていれば、インポートをし、以前インポートした時から更新されていなければ、インポートをしない様にしたいのです。でないと、クリックした時に、以前と同じデータを追加してしまうので、新しいデータだけを追加できる様にできますか? この"A"は会社の他部署が更新していき、又、アクセス側でインポートをするのもバイトの方が行うので、この様にミスができない様にしたいのです。誰か教えて下さい。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
アクセスのマクロでインポートするのではなくExcelのマクロでアクセスにデータを収める方法です。 dailydataが"A"です。 マクロは別のExcelファイル(dailyupdate.xlsとでもしておいてください) Sub Updatecheck() Dim FSysObj As Object Dim inppath As String Dim DBpath As String Dim inpfile As Object Dim DBfile As Object inppath = "D:\ddd\daylydata.xls" DBfile = "D:\ddd\業務DB.mdb" Set FSysObj = CreateObject("Scripting.FileSystemObject") Set inpfile = FSysObj.GetFile(inppath) Set outfile = FSysObj.GetFile(outpath) If inpfile.DateLastModified < outfile.DateLastModified Then DOupdate_proc End If Application.DisplayAlerts = False Application.Quit End Sub Sub DOupdate_proc() Dim DB接続 As ADODB.Connection Dim DB接続str As String Dim 累積TBL As Recordset Dim inppath As String Dim outpath As String inppath = "D:\ddd\daylydata.xls" outpath = "D:\ddd\業務DB.mdb" Workbooks.Open inppath ここでADOを使ってaccessのテーブルに追加 End Sub
その他の回答 (2)
- cistronezk
- ベストアンサー率38% (120/309)
回答2です。 >しかし、この"A"が以前インポートした時から更新されていれば、インポートをし、以前インポートした時から更新されていなければ、インポートをしない様にしたいのです。 これでは、「以前と同じデータを追加してしまう」ことを防げません。ファイルAにインポート済みのデータがあるからです。 同じデータを追加しないためには、ファイルAのデータをインポートする度にファイルAの中味を消去しておく必要があります。 ただ、これにしても人のやることですから、テーブルにあるデータと同じものをまた入力しないという保障はありません。 ですから結局は、ファイルAとテーブルデータの突合せが必要になります。どちらにしてもファイルの更新日付で判断できるものではありません。 なお、accessをメインにした考え方としては、 ・本番用と同じフィールドを持つ作業用テーブルを用意し、ファイルAのデータを作業テーブルにインポートする。 ・両テーブルから不一致分クエリを作成して本番にないデータを抽出し、本番テーブルに追加。 ・作業テーブルのデータを削除 という感じです。 これらをマクロ登録しておけばいいでしょう。
補足
なるほど、言われてみれば確かにインポート済みのデータを追加してしましますね。 クリック一つで、"A"からデータをインポートし、クエリを作成し本番テーブルに追加し、作業テーブルのデータを削除する事は可能ですか? これらは簡単にできますか?教えて下さい。お願いします。
- cistronezk
- ベストアンサー率38% (120/309)
どのフィールドの組み合わせが一致すると「同じデータ」と見なすのか、について具体的に書かれていないので具体的な回答は困難です。 一般的には、入力日時などのフィールがない限り、ファイルAのレコードとテーブルのデータを1件1件突き合せないと無理でしょう。
お礼
丁寧な回答ありがとうございます。 私は無知なので、ADOという物がいまいちよくわかりません。 検索し、調べてみたのですが、あまりよくわかりませんでした。