使用VBA将制表符分隔的文本导入Access表

时间:2013-11-13 18:51:42

标签: vba ms-access access-vba etl

我正在尝试使用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中都有自己的列?

1 个答案:

答案 0 :(得分:10)

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

我发现通常使用FileSystemObjectSplit(s, vbTab)等来执行此操作的唯一方法是为所有可能的255创建一个完全通用的规范字段并使用它。它需要一次性设置如下:

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

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

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

Import1.png

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

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

Import2.png

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

Import3.png

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

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

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