• ベストアンサー

AccessのマクロでCSVファイルをインポートする

Accessのマクロ・VBAにてCSVファイルを インポートしたいのですが、うまくいきません。 DoCmd.TransferText acImportDelim, , "C:\Documents and Settings\yoshimi\My Documents\顧客マスタテーブル.csv", False 現在のコードです。 「オブジェクト'0.txt’が見つかりませんでした。 オブジェクトが存在していること、名前やパス名が正しいことを確認 してください。」 とエラーが表示されます。 過去ログを検索し、似たようなものを見つけ同じようにしたつもりです。 http://okweb.jp/kotaeru.php3?q=1691138 (回答のANo.1の定義の保存場所が分からずしていません) どこがおかしいのか教えていただきたいです・・・

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

インポート先(保存先)となるテーブルが指定されていないようです。 その分、カンマ(,)が1個少ないなっているために引数がずれて判断され、インポートするファイルが「C:\~顧客マスタテーブル.csv」ではなく、「0.txt」だと判断されているのではないかと思います。 (「False」がファイル名と解釈され(False=0)、テキストファイルと解釈されて拡張子「.txt」をつけてエラー表示された、と) とりあえず、「Test」テーブルを作成し(フィールドは仮でF1,F2の2つでテキスト型)、「,"C:\~」の前に「,"Test"」を入れて実行してみて下さい。 (csvファイルが3列以上の構成であれば、「テーブル'Test'にはF3フィールドがありません」とのエラーが表示されるようになりると思いますので、適宜F3,F4,・・・と、必要な列数を追加して下さい:定義のかわりです)

Yshio
質問者

補足

ご返答ありがとうございます。 遅くなり申し訳ありません。 「込み合っています」のメッセージばかりで、書き込めませんでした・・・ 教えていただいたように、下記のようになおしました。 Private Sub 商事部門_Click() On Error GoTo 商事部門_Err DoCmd.TransferText acImportDelim, , , "Test", "C:\Documents and Settings\yoshimi\My Documents\顧客マスタテーブル.csv", False 商事部門_Exit: Exit Sub 商事部門_Err: MsgBox Error$ Resume 商事部門_Exit End Sub 今度は、 「指定した式は、いずれかの引数とデータ型が対応していません」と 表示されました。 念のため、csvのファイルを2列で文字のみのデータにしてみましたが 同じエラーが表示されます。 何がいけないのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

No.1です。 すみません、 > 「,"Test"」 ではなく、 > 「"Test",」 でした。お詫びの上、訂正いたします。 大変失礼致しました。

Yshio
質問者

お礼

ありがとうございました。 (「False」がファイル名と解釈され(False=0)、テキストファイルと解釈されて拡張子「.txt」をつけてエラー表示された エラーの理由を教えていただいて勉強できました。 &うまくいきました。m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • sanbit
  • ベストアンサー率32% (16/50)
回答No.2

手動でインポートしインポートの定義ファイルの作成してください。  テーブルインポート→テーブル選択新規⇒区切り記号つき→カンマ、先頭行をフィールド名にチェック  →新規テーブルに保存→各フィールドの型設定→主キーを設定をチェック  ⇒「これでデータをインポートするための設定は・・・」となります。   ここで画面の設定ボタンをクリック→インポートの定義ファイルを保存します。 DoCmd.TransferText acImportDelim, "インポートの定義ファイル名","Accessのテーブル名","テキスト名.csv" DoCmd.TransferText acImportDelim,"インポートの定義ファイル", _ "Test", "C:\Documents\顧客マスタテーブル.csv", False これでどうでしょうか?参考まで

Yshio
質問者

お礼

インポートの定義ファイルを保存 の方法が分からず困っていました。 インポートする際のルールを先にきめておくようなもの・・と 理解しました。(うまく言えませんが) インポートできました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAでCSVファイルのインポートについて

    ACCESS2003でCSVファイルのインポートを行うVBAをご教授下さい。 ただし、CSVファイルは各項目がダブルコーテーションではさまれており、カンマはありません。 1行目にヘッダーがあります。 DoCmd.TransferText acImportDelim, , FileName, ImportPath, True ↑ これだと、うまくインポートされませんでした。 大変困っております。 どうぞよろしくお願い致します。

  • MS AccessでExcelファイルのインポートは?

    AccessのVBAでExcelファイルをインポートするにはどうすればいいのでしょうか? ちなみに DoCmd.TransferText acImportDelim, , "Tmp名簿", strInPutPath & "\名簿.csv", True (strInPutPathは、ダイアログから取得したパスです) では、CSVファイル(TXTファイル)しか読み込めません。 (もちろん、そのため拡張子が「.csv」にしていますが 読み込むファイルをテキストファイルにしたら「.txt」でもいいです) 「ファイル」メニュー(コマンド)の「外部データの取り込み」→「インポート」では、Excelファイルも読み込めるので悔しいです。 これをVBAでやりたいんですが。 よろしくお願いいたします。

  • Access2000のCSVファイルのインポートについて

    Access2000でCSVファイルをインポートしようと思っています。 インポート方法は、VBAで 「DoCmd.TransferText acImportDelim, , "テーブル名", "ファイル名"」を使用しています。 この時に、CSVファイルが次のようなデータです。 F1,F2,F3 0010,0200,0001A12 0011,0201,0021B12 (実際は、1000件近いデータです) これをインポートすると、 F1,F2,F3 10,200,1A12 11,201,21B12 となってしまいます。 頭の「0」を省きたくないのです。 文字列として取り込めないでしょうか? CSVのデータに""を自動でつける方法はないでしょうか? Accessの外部データの取り込みを使うと、文字列として指定できるのですが、VBAを使いワンクリックでデータを取り込もうとしています。 よろしくお願いします。

  • CSVファイルをテーブルにインポートする

    1行目が項目名のCSVファイルをテーブルにインポートするため Private Sub CSVインポート_Click() DoCmd.TransferText acImportDelim, , "ブランド", "J:\ブランド.TXT" MsgBox ("CSVファイルインポート完了") End Sub を実行すると、f1,f2のフィールドがありませんとメッセージがあり F1,F2 のフィールドを追加し再度実行するとデータは f1,f2に入り 項目名もデータとして入っています。 1行目は項目名と宣言する設定はありますか。 よろしくお願いいたします。

  • アクセスと同フォルダのCSVファイルをインポートしたい

    初心者で質問がわかりにくかったらすみません。 アクセスで、CSVファイルを取込みたいです。 下記のような構文で、取込む方法はわかりました。 Private Sub コマンド62_Click() DoCmd.TransferText acImportDelim, "請求書csvインポート定義", _ "請求書", "C:\Documents and Settings\user3\デスクトップ\受付番号アクセス\これ!\請求書.csv", True End Sub しかし、これだと常に取込むCSVファイルが同じ場所ではないと、いけないので、他のPCで使用するとエラーになってしまいます。 なので、他のPCに移した場合でも、いちいち構文を修正せずに、 この構文が作成してあるアクセスと同フォルダの”請求書.csv”というファイル名のCSVデータを取込めるような、構文が知りたいです。 お手数ですが、教えてください。

  • Access VBAでファイルのインポートについて

    あるディレクトリにAccessのmdbファイルを置き、「インポート」フォルダを隣に置きます。 このフォルダ内にCSVファイルを置き、それをVBAでテーブル「tbl_import」にインポートさせたいのです。 ちなみにインポート後はディレクトリ「インポート」下層のディレクトリ「インポート済」に移動させたいのです。 下記例文では「file.csv」と書いていますが、このファイル名はインポートの都度、常に変わります。 インポートさせるファイルは常に一つです。 「*」を用いれば出来ると思っていたのですが、うまくいきません。 良い方法を教示いただけませんか。 DoCmd.RunSQL "DELETE * FROM tbl_import" DoCmd.TransferText acImportDelim, "インポート定義", "tbl_import", CurrentProject.Path & "\インポート\file.csv", True FileCopy CurrentProject.Path & "\インポート\file.csv", CurrentProject.Path & "\インポート\インポート済\file.csv" Kill CurrentProject.Path & "\インポート\file.csv"

  • Access VBA CSVファイルのインポート

    お世話になります。 VBAにてCSVファイル(タブ区切り)をインポートするのに、 以下のように記述してますが、エラーとなります。 なお、インポート先のtempテーブルはインポートするCSVファイルの フィールドと同じ並びで予め作成したものです。 DoCmd.TransferText acImportDelim, , "temp", path, True 「実行時エラー2391 貼り付け先のtempテーブルには、'フィールド1_ フィールド2_フィールド3'フィールドがありません。」 このエラーを見る限り、フィールド1~3が一つのフィールドとして 認識されているように見受けられます。 タブ区切りなのか、カンマ区切りなのかを指定するようなパラメタは あるのでしょうか。 なお、当該CSVファイルをウィザードより手動でインポートする分には 問題無くインポート出来ます。 ************** インポートするCSVファイルはユーザーにより見出し(フィールド)の 並びが異なる場合がある為、インポート定義を予め作っておくことが できない状況です。 ご教授の程、宜しくお願い致します。

  • ACCESSのテーブルへCSV形式のファイルを

    お世話になります。 ブランドテーブルへJドライブのルート内のCSV形式のファイルをインポートのため Private Sub インポート_Click() DoCmd.TransferText acImportDelim, , ブランド, j: ブランド.TXT End Sub で実行すると このアクションまたはメソッドを実行するには、「TableName/テーブル名因数が必要です。 とメッセージが帰ってきます。 これが解決すると インポートするCSVファイル6個ですが、ワンクリックで終わります。 宜しくお願いします。

  • Access インポート時にファイル名を追加したい

     Access2007のVBAで、あるフォルダ内の全CSVをインポートしたくて、次のページを参考にして、標準モジュールを組みました。  そして、あるフォルダ内全CSVのインポートには成功しました。  その時、全CSVはテーブル「Import_Table」にインポートされます。そこで、インポート時に元のCSVのファイル名をインポート先のテーブルの最後のフィールドに追加することはできるでしょうか? もし、知っておられる方がいたら、教えてください。 お願いします。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1226480442 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ Sub ImpCSV() Dim objFs As Object Dim objFld As Object Dim objFl As Object Const cnsFILEPATH = "C:\Documents and Settings\hoge\デスクトップ\hogehoge" 'フォルダー名 Const cnsTABENAME = "Import_Table" Set objFs = CreateObject("Scripting.FileSystemObject") Set objFld = objFs.GetFolder(cnsFILEPATH) For Each objFl In objFld.files If Right(objFl.Name, 4) = ".csv" Then DoCmd.TransferText TransferType:=acImportDelim,"インポート定義",tablename:=cnsTABENAME, _ filename:=cnsFILEPATH & "\" & objFl.Name, hasfieldnames:=False End If Next Set objFl = Nothing Set objFld = Nothing Set objFs = Nothing End Sub /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  • ACCESS2000について

    よろしく、お願いいたします。 ACCESS2000+WinXPを使用しております。 VBAにてボタンに、 DoCmd.TransferText acImportDelim, , "テーブル", "c:データ" というように書いて、ボタン一つで、データをテーブルに格納できるように致しました。 データは、csvまたはtxtなのですが、格納すると、 電話番号のようなデータの、最初の”0(ゼロ)”が消えてしまいます。 テーブルは、「テキスト型」にしてあります。 何か良い方法はありませんでしょうか? よろしく、お願いします。

このQ&Aのポイント
  • 新型コロナワクチン接種後の副反応に対処する方法についてまとめました。
  • 接種後は会場で待機し、副反応の有無を確認します。
  • アナフィラキシーや強い副反応が出た場合でも、医師などが対処してくれます。
回答を見る

専門家に質問してみよう