7

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

使用制表符(TAB 按钮)分隔列。我的问题是,是否可以在 VBA 中执行此操作?比如,在用于导入文本文件的访问向导中?

我正在使用DoCmd.TransferTextVBA 中的方法

4

2 回答 2

12

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

在此处输入图像描述

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

在此处输入图像描述

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

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

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

有一个参数HasFieldNames,您必须决定它是true还是false基于您的文件。

于 2013-02-25T14:27:39.617 回答
3

使用导入向导的缺点是,即使文件格式发生最轻微的变化,您也必须再次单击所有这些步骤才能使导入工作。

查看 @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
于 2013-02-26T03:05:04.917 回答