错误 3011 VBA 在访问中将所有表导出到 txt

Posted

技术标签:

【中文标题】错误 3011 VBA 在访问中将所有表导出到 txt【英文标题】:Error 3011 VBA exporting all tables to txt in access 【发布时间】:2019-07-23 19:54:45 【问题描述】:

我是 Visual Basic 的新手,我正在尝试将 ms 访问中的所有表导出到文本文件。

我有这个代码

Function save2txt() As String

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

On Error GoTo errHandler

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Set db = CurrentDb

For Each tdf In db.TableDefs
    ' ignore system and temporary tables
    If Not (tdf.Name Like "MSys*" Or tdf.Name Like "~*") Then
        Debug.Print tdf.Name
        DoCmd.TransferText transfertype:=acExportDelim, specificationname:="ExportSpec", tablename:=tdf.Name, FileName:=Application.CurrentProject.Path & "\" & tdf.Name & ".txt", hasfieldnames:=True
    End If
Next

Set tdf = Nothing
Set db = Nothing

errHandler:

   Debug.Print Err.Number & " " & Err.Description


End Function

前 3 个表导出为 .txt,然后出现错误 3011。当我尝试手动导出时,会弹出一个窗口,提示字段不存在。我正在使用通过向导保存的规范进行导出。

这是出现在 MSysIMEXSpec 中的内容:

DateDelim:  /
DateFourDigitYear:  -1
DateLeadingZeros:  0
DateOrder:  0
DecimalPoint:  .
FieldSeparator:  ,
FileType:  1252
SpecId: 2
SpecName: ExportSpec
SpecType:  1
StartRow:  0
TextDelim:  
TimeDelim:  :

【问题讨论】:

不带SpecificationName 参数试试。此外,在您的 errHandler: 标签前添加 Exit Function 语句。如果您的某些表需要schema.ini 文件,您可能必须为每个表指定不同的文件。 我无法删除SpecificationName,因为它返回给我error 3441。我使用逗号作为字段分隔符,因此与小数分隔符重叠 使用逗号作为小数分隔符与MSysIMEXSpec这一行不一致:DecimalPoint: .。您可以尝试更改字段分隔符。但是您仍然可能需要创建一个或多个 schema.ini 文件才能正确导出所有表。 当我尝试没有SpecificationName参数时,它只显示十进制错误。我试过只用Format=Delimited(,)DecimalSymbol=. 创建一个schema.ini,但它似乎不起作用。所有表的列是否需要相同大小才能使用导出规范导出?因为前三个是导出的,所以只有在到达更大的时候才会停止 我没有足够的信息来进一步帮助您。 Schema.ini 有据可查,网上有大量可搜索的帮助。对不起 【参考方案1】:

我遇到了同样的问题,我发现其中一个表的字段名称与规范中定义的名称不同。您必须为该表创建一个不同的规范,其列名在其他表中不存在。

【讨论】:

以上是关于错误 3011 VBA 在访问中将所有表导出到 txt的主要内容,如果未能解决你的问题,请参考以下文章

在VBA中将行从工作表复制和删除到多个工作表

Excel VBA 导出到 Access:ADO 错误

如何在asp.net mvc中将Webcontrol表导出到excel

使用 VBA 将访问表导出为 XML

VBA excel导出访问

从 MS Access 中将交叉表查询结果导出到 Excel