使用VBA导入带分隔符的文本

时间:2013-02-25 12:36:56

标签: vba ms-access ms-access-2007 access-vba

我正在尝试自动添加新的txt文件,这些文件都具有相同的(已知)布局。

使用选项卡(TAB按钮)分隔列。是否可以在VBA中执行此操作,如在Access向导中导入文本文件?

我在VBA中使用DoCmd.TransferText方法

2 个答案:

答案 0 :(得分:12)

您需要通过向导一次来制作规范文件。为此,请像平常一样导入文本文件,但在深入了解向导之前,请单击左下角的“高级...”按钮。这是您制作spec文件的地方。

enter image description here

使这些列与您的输入文件,数据类型和所有列匹配。如果您使用的话,请务必选择{tab}字段分隔符和相应的文本限定符。

enter image description here

保存您的规范(稍后可以通过返回到同一屏幕并点击Specs...然后保存旧版本来进行编辑)

现在你可以像这样使用VBA了

DoCmd.TransferText acImportDelim, "your spec name", "destination table name", sourceFilePath

根据您的文件,您必须根据HasFieldNamestrue来确定参数false

答案 1 :(得分:3)

使用导入向导的缺点是,即使文件格式稍有变化,您也必须再次单击所有这些步骤以使导入正常工作。

ms Access import table from file in a query中查看@ Remou的答案,了解如何在直接SQL中执行此操作。我实际上在我的项目中使用相同的方法。我使用这样的东西(详见我的链接):

insert into MyTable (column-list...)
select (column-list...)
from [data-source-specifications].[file-name]
any-other-clauses...;

只是一个警告。如果将此SQL语法放入普通的Access查询对象中,Access很可能会将其破坏到甚至无法打开查询对象的程度。因此,当您在Access中尝试查询时,请在文本文件中撰写并保存查询。一旦测试并运行了查询,将其保存在VBA子例程中,以便Access完全按原样运行它,如下所示:

sub MyTableImport()
  sqlStr = "         insert into MyTable (column-list) " ' leave a space at the
  sqlStr = sqlStr & "select (column-list...) " ' end of each line of the string
  sqlStr = sqlStr & "from [data-source-specifications].[file-name] "
  sqlStr = sqlStr & "any-other-clauses... ;"

  DoCmd.RunSQL sqlStr
end sub