我正在尝试自动添加新的文本文件,这些文件都具有相同的(已知)布局。
使用制表符(TAB 按钮)分隔列。我的问题是,是否可以在 VBA 中执行此操作?比如,在用于导入文本文件的访问向导中?
我正在使用DoCmd.TransferText
VBA 中的方法
您需要通过向导一次来制作您的规范文件。为此,请像往常一样导入您的文本文件,但在深入了解向导之前,请单击左下角的“高级...”按钮。这是您制作规范文件的地方。
使所有这些列与您的输入文件、数据类型和所有内容相匹配。{tab}
如果您正在使用,请务必选择字段分隔符和适当的文本限定符。
保存您的规范(稍后可以通过返回同一屏幕并单击Specs...
然后保存旧的来进行编辑)
现在你可以像这样在 VBA 中使用
DoCmd.TransferText acImportDelim, "your spec name", "destination table name", sourceFilePath
有一个参数HasFieldNames
,您必须决定它是true
还是false
基于您的文件。
使用导入向导的缺点是,即使文件格式发生最轻微的变化,您也必须再次单击所有这些步骤才能使导入工作。
查看 @Remou 在ms Access import table from file in a query中的回答,了解在直接 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