【问题标题】:import tab-delimited txt into Access table using VBA使用 VBA 将制表符分隔的 txt 导入 Access 表
【发布时间】:2013-11-13 18:51:41
【问题描述】:

我正在尝试使用 VBA 将制表符分隔的 txt 文件导入 Access 表。在我的代码中,我想将它插入到尚未创建的表中。

这是我尝试做的。注意 - 我可以使用 CSV 来完成这项工作,并且不包括以下内容:DataType:=xlDelimited, Tab:=True

Sub InsertData()

    'import CSV into temp table
    DoCmd.TransferText TransferType:=acLinkDelim, TableName:="tbl_TEMP", _
    FileName:=FileNameVariable, HasFieldNames:=True, DataType:=xlDelimited, Tab:=True

End Sub

当我运行这个块时,DataType:=xlDelimited, Tab:=True 出现以下错误

编译错误:未找到命名参数

我应该如何更改此设置以提取制表符分隔的 txt 文件,以便 txt 中的每一列在 Access 中都有自己的列?

【问题讨论】:

  • 根据the documentationTransferText不带DataType作为参数。
  • 好的,感谢您将我指向文档。您知道可以让我导入制表符分隔的 txt 文件的另一种方法(或方法组合)吗?
  • 我看到了这个,但我希望有一种方法可以在代码中完成这一切。
  • 您是否正在寻找一种将通用制表符分隔的文本文件导入具有任意字段名称(Field001Field002、...)并将所有字段作为文本的新表的方法?

标签: ms-access vba etl


【解决方案1】:

正如您从有关该主题的其他文章中看到的那样,实际上并没有通用的方法来导入制表符分隔的文本文件。我见过的所有其他解决方案都说您应该导入一次制表符分隔的文本文件,保存导入规范,然后将该导入规范用于所有后续导入。问题在于,如果您要导入不同的制表符分隔文件,则规范可能不匹配。

我发现通用的唯一方法(不使用 FileSystemObjectSplit(s, vbTab) 等“滚动你自己的”代码)是为所有 255 个可能的字段创建一个完全通用的规范并使用它.它需要一次性设置,如下所示:

从 Pastebin here 复制 CSV 数据,将其粘贴到您喜欢的文本编辑器中,并将其保存为 GenericTabSpecification.csv

在 Excel 中打开该文件,选择所有 256 行和 4 列,然后按 Ctrl+C 进行复制。

在 Access 中,启动文本文件的导入向导并选择任何制表符分隔的文件。 (我们实际上不会导入它。)

当您到达向导的第一页时,单击“高级...”按钮。

在“导入规范”对话框中,验证设置(字段分隔符、文本限定符等),然后单击“字段信息”网格的左上角,以便选择所有行:

点击 Ctrl+V 将 Excel 中的数据粘贴到网格中。网格现在应该包含 255 行。

单击“另存为...”按钮并将规范命名为GenericTabSpecification。完成后,取消向导。

现在我们可以使用这样的语句从 VBA 进行通用导入

DoCmd.TransferText _
        TransferType:=acImportDelim, _
        SpecificationName:="GenericTabSpecification", _
        TableName:="newTable", _
        FileName:="C:\Users\Gord\Desktop\foo.txt", _
        HasFieldNames:=False

【讨论】:

    猜你喜欢
    • 2013-06-04
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多