我正在尝试自动添加新的txt文件,这些文件都具有相同的(已知)布局。
使用选项卡(TAB按钮)分隔列。是否可以在VBA中执行此操作,如在Access向导中导入文本文件?
我在VBA中使用DoCmd.TransferText
方法
答案 0 :(得分:12)
您需要通过向导一次来制作规范文件。为此,请像平常一样导入文本文件,但在深入了解向导之前,请单击左下角的“高级...”按钮。这是您制作spec文件的地方。
使这些列与您的输入文件,数据类型和所有列匹配。如果您使用的话,请务必选择{tab}
字段分隔符和相应的文本限定符。
保存您的规范(稍后可以通过返回到同一屏幕并点击Specs...
然后保存旧版本来进行编辑)
现在你可以像这样使用VBA了
DoCmd.TransferText acImportDelim, "your spec name", "destination table name", sourceFilePath
根据您的文件,您必须根据HasFieldNames
或true
来确定参数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