• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCELからAccessテーブルの有無判定)

EXCELからAccessテーブルの有無判定及び新規作成方法

このQ&Aのポイント
  • 日報をEXCELで作成しACCESSへ登録してますが、年初めにテーブルの差替え行っています。ACCESSとEXCELで何れも差替えを可能にしてますが、ACCESSで差替え後だとエラーになってしまいます。それを回避する為、テーブルの有無を検索判定の方法が分りません。
  • 自分なりに作成したのですが、予約済みエラーが発生してしまいます。
  • 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1です。 検索してみると、下記URLのページの下の方に、 「テーブルの存在をチェック」のコードが載っております。 http://tuka.s12.xrea.com/index.xcg?p=ADO#p15 やっている事は、ADOでテーブルのリストを取得して、引数の文字列と比較して、存在有無を戻していますので、#1の回答の応用編となります。 ご自分でアレンジするのが面倒なら、こちらで如何でしょうか。

25630
質問者

お礼

 回答有難う御座います。 参照した所、ファンクション内に記載されていない引数が有り、不明点がいくつか有りますが、勉強になりました。  色々と検証して見ます。 有難う御座いました。

その他の回答 (2)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

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

25630
質問者

お礼

 回答有難う御座います。 DBを開いて検証した所、別な所でエラーになってしまいました。 色々と検証して見ます。 有難う御座いました。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

こちらでADOでテーブルのリストを取得する方法を回答しておりますが、これを応用して所定のテーブルの有無を判定してはいかがでしょうか。ご参考まで。 http://okwave.jp/qa/q7072249.html

25630
質問者

補足

参考資料有難う御座います。 しかし、そこまでの応用するのは困難に思えます。 テーブルのリストの取得以外の方法で、検索する事は可能ですか?

関連するQ&A