访问 VBA - 导入 *.CSV 时出现运行时错误 31519。您无法导入此文件

Posted

技术标签:

【中文标题】访问 VBA - 导入 *.CSV 时出现运行时错误 31519。您无法导入此文件【英文标题】:Access VBA - while importing *.CSV I'm getting Run time error 31519. You can not import this file 【发布时间】:2017-06-19 15:08:29 【问题描述】:

在 Access 中使用 DoCmd.TransferText 方法时,我收到问题标题中描述的错误。 我的代码正在从当前数据库中的表中获取文件名(这些文件是从单个文件夹中存在的 2000 个以上的文件中选择的),其目标是将这些文件的内容导入 Access 中的一个表中。 请阅读本主题以获取更多信息: VBA procedure to import only selected csv files (from one folder) into a single table in access

所有文件具有相同的结构和数据类型。

这是我正在使用的代码:

 Sub Importing_data_into_a_single_table_csv_version()
   Dim my_path As String
   Dim rs As Recordset
   Dim start As Double
   Dim total_time As String

     DoCmd.SetWarnings True
     my_path = "C:\Users\michal\SkyDrive\csv\bossa\mstcgl_csv\"     ' source folder.

     start = Timer         ' remember time when macro starts.

     Set rs = CurrentDb.OpenRecordset("CSV Files")   ' opens the table with file names.
       Do Until rs.EOF
          If Dir(my_path & rs.Fields(0).Value) <> "" Then
          ' DoCmd.TransferText acImportDelim, "macro_link_specification", "all_stocks_3", "my_path & rs.Fields(0).Value", True
             DoCmd.TransferText acImportDelim, "import", "all_stocks_1", "my_path & rs.Fields(0).Value", True
          ' expression. TransferText ( TransferType, SpecificationName, TableName, FileName, HasFieldNames, htmlTableName, CodePage )

          End If
          rs.MoveNext
       Loop

   total_time = Format(Timer - start, "hh:mm:ss")
   MsgBox "This code ran successfully in " & total_time, vbInformation
 End Sub

代码在DoCmd.TransferText acImportDelim, "import", "all_stocks_1", "my_path &amp; rs.Fields(0).Value", True 处崩溃。

是否有一些特殊的方式应该准备目标表来导入这些文件?很抱歉这些类型的问题,但我现在使用 Access 3 周,所以我只是一个初学者。 我正在使用名为“import”的导入规范。这可能是问题的原因吗?

目标表如下所示:

这是我一直在尝试将数据导入的另一个表。 该表中的字段名称没有特殊字符,并且在字段上设置了相同的数据类型,但没有区别。返回相同的错误 31519。

【问题讨论】:

首先确保您能够使用标准外部数据导入文本 -> 导入访问,使用存储的规范。我认为问题出在规范中。首先检查小数分隔符。也尝试重命名列标题,空格字符有时可能会导致问题。 您可能需要暂时将文件从 .mst 重命名为 .csv 才能导入。访问可能对这些东西很挑剔。 @Andre 是的 Andre,谢谢你的建议。这个问题中的代码相对于上一个问题的代码略有修改。我尽我所能,排除一些愚蠢的错误。此代码仅适用于 *.CSV 文件,其名称取自“CSV 文件”链接表:-) 我只是不明白为什么会出现此错误,当手动时我能够将这些文件一一加载到桌子。 等等,"my_path &amp; rs.Fields(0).Value" 是您的实际代码吗?您必须删除引号,以便实际使用变量。 DoCmd.TransferText acImportDelim, "import", "all_stocks_1", my_path &amp; rs.Fields(0).Value, True @Andre 我现在正在检查您的建议。这是有道理的。错误已更改,但数据仍未加载到 Access 表中。我需要一些时间来弄清楚,我会回复你。 【参考方案1】:

结果证明解决方案很简单:

DoCmd.TransferText acImportDelim, "import", "all_stocks_1", _
                   "my_path & rs.Fields(0).Value", True

在引号内有文件名变量,所以它被用作文字字符串(并给出了一个无效的路径)。

正确:

DoCmd.TransferText acImportDelim, "import", "all_stocks_1", _
                   my_path & rs.Fields(0).Value, True

【讨论】:

以上是关于访问 VBA - 导入 *.CSV 时出现运行时错误 31519。您无法导入此文件的主要内容,如果未能解决你的问题,请参考以下文章

执行 vba 查询 ms 访问时出现运行时错误 3075

使用 VBA 将电子表格保存为 *.csv 时出现问题

Python:使用 pandas 导入 csv 文件时出现 ID 错误

使用 DictReader 访问 CSV 的第三列时出现 KeyError [重复]

导入 CSV 文件时出现问题 (phpmyadmin)

将 .csv 导入 R 时出现 UTF-8 编码错误?