- ベストアンサー
EXCELからAccessテーブルの有無判定及び新規作成方法
- 日報をEXCELで作成しACCESSへ登録してますが、年初めにテーブルの差替え行っています。ACCESSとEXCELで何れも差替えを可能にしてますが、ACCESSで差替え後だとエラーになってしまいます。それを回避する為、テーブルの有無を検索判定の方法が分りません。
- 自分なりに作成したのですが、予約済みエラーが発生してしまいます。
- 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 検索してみると、下記URLのページの下の方に、 「テーブルの存在をチェック」のコードが載っております。 http://tuka.s12.xrea.com/index.xcg?p=ADO#p15 やっている事は、ADOでテーブルのリストを取得して、引数の文字列と比較して、存在有無を戻していますので、#1の回答の応用編となります。 ご自分でアレンジするのが面倒なら、こちらで如何でしょうか。
その他の回答 (2)
- nicotinism
- ベストアンサー率70% (1019/1452)
ExcelからオートメーションでAccessを操作する場合です。 DcountはMDBファイルそのものをAccessで開いていないと使えません。 MsysObjects(複数形に) 『日報』というひな形テーブルはあるのですよね。 mitarashi さんが二番目に紹介されたリンク先、ナイスだと思います。 下の方だけではなく全部目を通すのをお勧め。 以下はご参考までに。 Sub test() 'Microsoft Access xx.xx Object Library に参照設定 Dim ACC As New Access.Application ACC.OpenCurrentDatabase "D:\日誌DB", False '←Trueの場合は開けなかった場合にエラー処理要、 'True にしてエラー処理も入れた方が確実 If ACC.DCount("*", "MsysObjects", "[Name] = '日報(" & Year(Now) - 1 & "年)'" & " And [Type]=1") = 0 Then ACC.DoCmd.CopyObject "日報(" & Year(Now) - 1 & "年", acTable, "日報" ACC.CurrentDb.TableDefs.Refresh ACC.CurrentDb Execute("delete * from 日報(" & Year(Now) - 1 & "年") '念のためのレコード削除?なの End If ACC.CloseCurrentDatabase '開いたAccessが無くなっているのをタスクマネージャで確認を End Sub ※なお全角半角に限らず『()』カッコはトラブルの元になりかねないので 日報_yyyy年 などにしておいた方が良いと思います。 http://support.microsoft.com/kb/826763/ja
お礼
回答有難う御座います。 DBを開いて検証した所、別な所でエラーになってしまいました。 色々と検証して見ます。 有難う御座いました。
- mitarashi
- ベストアンサー率59% (574/965)
こちらでADOでテーブルのリストを取得する方法を回答しておりますが、これを応用して所定のテーブルの有無を判定してはいかがでしょうか。ご参考まで。 http://okwave.jp/qa/q7072249.html
補足
参考資料有難う御座います。 しかし、そこまでの応用するのは困難に思えます。 テーブルのリストの取得以外の方法で、検索する事は可能ですか?
お礼
回答有難う御座います。 参照した所、ファンクション内に記載されていない引数が有り、不明点がいくつか有りますが、勉強になりました。 色々と検証して見ます。 有難う御座いました。