Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Access 2016)
CSVのインポート時のエラー
投稿日時: 22/06/08 22:00:29
投稿者: yurappy

お世話になります。
 
CSVのインポート時のエラーの事で困っていて助けてください。
 
保存済みのインポートを利用して、CSVからインポートを行っているのですが、毎回の操作を効率化しようとボタンにVBAのコードを書いて動かしてみました。
 
ところが、リボンにある「データ タスクの管理」から動作をさせると正常にインポートするのですが、VBAのコードから起動をすると1つのフィールドの一部でエラーになります。
 
ボタンに記述したVBAコードは次のコードです。
 
 DoCmd.TransferText acImportDelim, , “定義の名称”, “C:\フォルダ名¥フォルダ名\ファイル名.csv”, True
 
 
CSVファイルの値は次のように並んでおります。
 
 前略 │  氏名  │ 電話番号  │ 住所  │         後略
      山田太郎,9012345678,群馬県**市○○町1-1-1
      山田次郎,09023456789,群馬県**市○○町123
      山田三郎,090-1234-5678,群馬県**市○○町1-21-3
      山田四郎,0276123456,群馬県**市○○町456
      鈴木花子,276234567,群馬県**市○○町2-34-5
      鈴木真理,0276-12-3456,群馬県**市○○町1234-1
 
インポート先のテーブルは
 
前略
 
氏名 短いテキスト型
電話番号 短いテキスト型
住所 短いテキスト型
 
後略 (全て短いテキスト型)
 
の様になってます。
 
 
エラーの内容は、
 
エラー    データ型の変換エラー
フィールド  電話番号
行      3 と 6
 
の様に、 ー  がある行がエラーとなります。
 
 
DoCmd.TransferText acImportDelim, “定義の名称”, “テーブル名”, “C:\フォルダ名¥フォルダ名\ファイル名.csv”, False
 
の様な記述もあったので試してみましたがエラーになって、困っております。
 
どこか記述の仕方が間違っていると思うのですが、もともとVBAの基本もわからずネットを調べてもよくわからず悩んでおります。
 
対策方法や正しい書き方がおわかりになりましたらご教授ください。
 
よろしくお願い申し上げます。

回答
投稿日時: 22/06/09 08:58:25
投稿者: Suzu

引用:
エラーの内容は、
  
エラー    データ型の変換エラー
フィールド  電話番号
行      3 と 6
  
の様に、 ー  がある行がエラーとなります。

 
 
インポート定義 の 電話番号フィールドのデータ型を数値型のフィールドに指定している為
「-」が数値ではないのでエラーになっていると思われます。
 
T'sWare インポート定義を確認するには?
https://tsware.jp/tips/tips_528.htm
 
修正するか、インポート定義を削除し新たに作り直し定義しなおしましょう。

投稿日時: 22/06/09 09:21:15
投稿者: yurappy

Suzu様
 
お世話になります。
ご親切にありがとうございます。
 
教えていただいたページを参考に調べて見ましたら「Data Type」は 10 の テキスト型となっていて、インポート先と同じ設定になっておりました。
 
試しに、他の型にして試しても同様で、リボンからだと正常に動作をするのですが、VBAコードからだとエラーになります。
 
インポートの定義を作り直しても同様で、定義の名称をカナにしたりカナ半角英文字で試しても同じでした。
また、インポート先のテーブルの型を変えても同様でした。
 
引き続き試してみましが、もし何か他に確認する事などアドバイスいただければ嬉しいです。
 
ありがとうございます。
 
よろしくお願い申し上げます。

回答
投稿日時: 22/06/09 09:52:47
投稿者: Suzu

引用:
CSVファイルの値は次のように並んでおります。
  
 前略 │  氏名  │ 電話番号  │ 住所  │         後略
      山田太郎,9012345678,群馬県**市○○町1-1-1
      山田次郎,09023456789,群馬県**市○○町123
      山田三郎,090-1234-5678,群馬県**市○○町1-21-3
      山田四郎,0276123456,群馬県**市○○町456
      鈴木花子,276234567,群馬県**市○○町2-34-5
      鈴木真理,0276-12-3456,群馬県**市○○町1234-1

引用:
エラー    データ型の変換エラー
フィールド  電話番号
行      3 と 6
  
の様に、 ー  がある行がエラーとなります。

 
引用:
電話番号 短いテキスト型

 
発生しているのは、データ型の変換エラーであり、
インポート定義にて、短いテキスト型 を指定しているのであれば 型変換にはならないと考えます。
 
なので。
・ファイルの破損
・質問者さんの勘違い
くらいしか思いつきません。
 
新規accdb で テーブルを作成し、試してみてください。

回答
投稿日時: 22/06/09 11:42:06
投稿者: sk

引用:
保存済みのインポートを利用して、CSVからインポートを行っている

引用:
リボンにある「データ タスクの管理」から動作をさせると正常にインポートする

[保存済みのインポート/エクスポート操作の実行]アクションに当たる命令は、
DoCmd オブジェクトの RunSavedImportExport メソッドです。
 
Office VBA リファレンス より:
https://docs.microsoft.com/ja-jp/office/vba/api/access.docmd.runsavedimportexport
 
引用:
DoCmd.TransferText acImportDelim, , “定義の名称”, “C:\フォルダ名¥フォルダ名\ファイル名.csv”, True

一方、TransferText メソッドは[テキストのインポート/エクスポート]アクションに
当たる別の命令です。
 
インポート対象となる CSV ファイルのパスが常に固定されており、
またインポート先として指定された既存のテーブルに保存されている
レコードが全て削除されてしまっても構わないのであれば、
RunSavedImportExport メソッドによって保存済みのインポート操作を
実行なさればよろしいでしょう。

回答
投稿日時: 22/06/09 16:47:51
投稿者: Suzu

sk さんの引用:
引用:
保存済みのインポートを利用して、CSVからインポートを行っている

あ。。。
失礼しました。

投稿日時: 22/06/09 18:13:42
投稿者: yurappy

Suzu様
sk様
 
ご親切にありがとうございます。
よくわからず、説明が下手ですみません。
 

引用:

インポート対象となる CSV ファイルのパスが常に固定されており、
またインポート先として指定された既存のテーブルに保存されている
レコードが全て削除されてしまっても構わないのであれば、
RunSavedImportExport メソッドによって保存済みのインポート操作を
実行なさればよろしいでしょう。

 
 
インポート元になるファイルはいつも固定なのですが、インポート先のテーブルには追記するようにして
インポートをしたいのです。
 
sk様から教わった
引用:

[保存済みのインポート/エクスポート操作の実行]アクションに当たる命令は、
DoCmd オブジェクトの RunSavedImportExport メソッドです。

 
を、試してみましたらエラーは無くなりましたが、なぜかインポートがされないフィールドがあるので、
再度インポートの定義から作り直してみます。
 
いろいろ勉強になり助かります。
 
よろしくお願い申し上げます。

投稿日時: 22/06/10 10:36:39
投稿者: yurappy

Suzu様
sk様
  
おはようございます。
お世話になります。
 
ご親切にアドバイスいただいて、ありがとうございます。
おかげさまで、無事に解決できました。
 
また試験中ですが、アクセスのファイルを作り直して、VBAのコードを
 

引用:
[保存済みのインポート/エクスポート操作の実行]アクションに当たる命令は、
DoCmd オブジェクトの RunSavedImportExport メソッドです。

 
に変更して書き直して試したらエラー無く動作して追記できました。
 
おかげさまで、何とか思うような動作にできそうです。
 
またわからなくて困った時には、申し訳ございませんが、助けてください。
 
ありがとうございました。