• ベストアンサー

エクセルからアクセスにインポートする際のエラーについて

こんにちは。 エクセルで作成された従業員台帳を、アクセスにインポートしたいのですが、エラーが出て困っています。 インポートの為のフォームを作り、参照ボタンでそのエクセルファイルを選択してフルパスを取得し(こちらの動作はOKです)、実行ボタンでそのファイルをインポートする、という方法をとろうと思います。 transferspreadsheet で、エクセルのファイル(.xls)は問題なくいくのですが、csv形式のファイルを指定して同じようにインポートすると、 実行時エラー 3274 外部テーブルのフォーマットが正しくありません。 となってしまいます。 書いているコードは、 DoCmd.TransferSpreadsheet acImport, 8, "従業員台帳(アクセス側でのテーブルの名前)", "上記画面で取得したフルパス", True(一番上の項目をフィールド名として使用します), "" です。.xlsでも.csvの形式でもインポートできるようにしたいのです。 環境は、winXPpro、Access2000、Excel2000 です。 よろしくお願いします。

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

  • ベストアンサー
  • vantage
  • ベストアンサー率60% (310/514)
回答No.1

TransferSpreadsheet ではなく TransferText を使用してみてください。 詳細はヘルプをご覧下さい。

satie
質問者

お礼

こんにちは。早速の回答ありがとうございます。ヘルプを見て、TransferTextを使用してみたらできました! インポート元のファイルが.xlsのときはTransferSpreadsheet、.csvのときはTransferTextを使うようにしようと思います。どうもありがとうございました。 お礼に書いてしまって申し訳ないのですが、インポートしたテーブルを、削除するということはできないのでしょうか?何回も取り込む場合、テーブルが残っているとちょっと面倒なので…(今はそれにより発生するエラーの番号を拾って回避しています)。もしお分かりになりましたらよろしくお願いします。

その他の回答 (2)

  • vantage
  • ベストアンサー率60% (310/514)
回答No.3

#1 です。 >インポートしたテーブルを、削除するということはできないのでしょうか テーブルの削除なら DoCmd.DeleteObject acTable, "テーブル名" ですね。 毎回、同じデータ形式のCSVをインポートするなら、インポート先のワークテーブルを固定にしておいて、インポートの直前に、 DoCmd.SetWarnings False DoCmd.RunSQL "Delete From ワークテーブル名" で、データだけ消してしまう方法があります。

satie
質問者

お礼

こんにちは。再度の回答、どうもありがとうございます。 データが重複すると困るので、インポートしたテーブルを参照して、データが残っていたらdelete文で削除し、インポートの処理を行っているのですが、テーブルがない場合、参照することすらできないので(この部分をエラー番号で拾っています)、そうだ、テーブルを削除すればいい、と思ったのです。取り込むファイルは同じ形式の予定ですが、お客さんの使うソフトに組み込む予定ですので、できるだけエラーの出ないようにしたいものですから… 本当に助かりました。ありがとうございます。また何かありましたらよろしくお願いします。

  • 1enk
  • ベストアンサー率23% (4/17)
回答No.2

TransferSpreadsheetではなくTransferTextを使います。 DoCmd.TransferText acImportDelim,"定義名","アクセスのテーブル名","ファイル名",True(最初の行をフィールド名として使用) となります。 ひとつのコマンドでエクセルもテキストデータも、と いう方法はないのでは?

satie
質問者

お礼

こんにちは。インポート元のファイルがcsv形式のときは、TransferTextを使用するようにしたらできました!回答どうもありがとうございました。