プロが教えるわが家の防犯対策術!

こんにちは。
エクセルで作成された従業員台帳を、アクセスにインポートしたいのですが、エラーが出て困っています。

インポートの為のフォームを作り、参照ボタンでそのエクセルファイルを選択してフルパスを取得し(こちらの動作はOKです)、実行ボタンでそのファイルをインポートする、という方法をとろうと思います。

transferspreadsheet で、エクセルのファイル(.xls)は問題なくいくのですが、csv形式のファイルを指定して同じようにインポートすると、
実行時エラー 3274 外部テーブルのフォーマットが正しくありません。 となってしまいます。

書いているコードは、
DoCmd.TransferSpreadsheet acImport, 8, "従業員台帳(アクセス側でのテーブルの名前)", "上記画面で取得したフルパス", True(一番上の項目をフィールド名として使用します), ""

です。.xlsでも.csvの形式でもインポートできるようにしたいのです。

環境は、winXPpro、Access2000、Excel2000 です。
よろしくお願いします。

A 回答 (3件)

TransferSpreadsheet ではなく


TransferText を使用してみてください。

詳細はヘルプをご覧下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/07/23 14:48

#1 です。



>インポートしたテーブルを、削除するということはできないのでしょうか

テーブルの削除なら

DoCmd.DeleteObject acTable, "テーブル名"

ですね。
毎回、同じデータ形式のCSVをインポートするなら、インポート先のワークテーブルを固定にしておいて、インポートの直前に、

DoCmd.SetWarnings False
DoCmd.RunSQL "Delete From ワークテーブル名"

で、データだけ消してしまう方法があります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/07/23 15:25

TransferSpreadsheetではなくTransferTextを使います。



DoCmd.TransferText acImportDelim,"定義名","アクセスのテーブル名","ファイル名",True(最初の行をフィールド名として使用)

となります。

ひとつのコマンドでエクセルもテキストデータも、と
いう方法はないのでは?
    • good
    • 1
この回答へのお礼

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

お礼日時:2003/07/23 14:50

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A