【问题标题】:Export all Microsoft Access tables into separate CSV files将所有 Microsoft Access 表导出到单独的 CSV 文件中
【发布时间】:2021-09-23 08:29:52
【问题描述】:

我有一个包含 200 个表的 .mdb。 我想编写一个 vba 例程,将数据导出到单独的 CSV。

在谷歌上我找到了这段代码:

Public Sub ExportAllTablesToCSV()

    Dim i As Integer
    Dim name As String
    
    For i = 0 To CurrentDb.TableDefs.Count
        name = CurrentDb.TableDefs(i).name
        
        If Not Left(name, 4) = "msys" And Not Left(name, 1) = "~" Then
            DoCmd.TransferText acExportDelim, "", name, _
                "c:\exports\" & name & ".csv", _
                True
        End If
    
    Next i

End Sub

看起来没问题,但它需要一个导出规范(acExportDelim 之后的参数),这使得脚本无用,因为我不想手动创建 200 个导出规范。

有什么想法吗?

【问题讨论】:

  • 呃,那个参数是可选的...
  • 根据帮助页面留空。
  • 如果我将其留空,我会收到错误“运行时错误 3441”。

标签: vba csv ms-access


【解决方案1】:

这对我有用。

Option Compare Database
Option Explicit
    
Private Sub Command0_Click()

On Error GoTo Err_ExportDatabaseObjects
     
Dim db As Database
Dim td As TableDef
Dim d As Document
Dim c As Container
Dim i As Integer
Dim sExportLocation As String

Set db = CurrentDb()
     
sExportLocation = "C:\all_files\"

For Each td In db.TableDefs 'Tables
    If Left(td.Name, 4) <> "MSys" Then
        DoCmd.TransferText acExportDelim, , td.Name, sExportLocation & "Table_" & td.Name & ".csv", True
    End If
    Next td
Set db = Nothing
Set c = Nothing

MsgBox "All database objects have been exported as a csv file to " & sExportLocation, vbInformation

Exit_ExportDatabaseObjects:
Exit Sub

Err_ExportDatabaseObjects:
MsgBox Err.Number & " - " & Err.Description
Resume Exit_ExportDatabaseObjects
     

End Sub

【讨论】:

    【解决方案2】:

    您确定要使用 CSV 选项吗?由于这种格式无法将表导入回 ms 访问(导致未保存数据架构),因此您需要 200 个带有架构的文件。好的,如果 csv - 有一个页面 https://docs.microsoft.com/en-us/office/vba/api/access.docmd.transfertext。我,我尝试了其他更方便的 XML 方式,以防你想以可转换格式保存表格

    Dim db As DAO.Database
    Dim td As DAO.TableDefs
    
    Set db = CurrentDb()
    Set td = db.TableDefs
    For Each t In td    'loop through all the fields of the tables
        'Ignore any system tables
        If Left(t.Name, 4) = "MSys" Then GoTo Continue
            DoCmd.OutputTo acOutputTable, t.Name, , _
           (strPathAndFileName & t.Name & ".xml"), False   
    Continue:
    Next
    

    ` 系统将提示您使用格式确认选择任何 t formatschema

    所以你必须用键或鼠标点击 3 x 200 次,然后在大约十分钟内完成工作。

    【讨论】:

    • 谢谢你的回答,但是客户想要csv格式..
    • 如果将 `DoCmd.OutputTo` 更改为 `Application.ExportXML ObjectType:=acExportTable, DataSource:=t.Name, _ DataTarget:=(strFolderName & "\" & t.Name & "。 xml"), otherflags:=acEmbedSchema ` 然后所有输出将自动完成。对于像 `Application.ImportXML DataSource:=strFullpath, ImportOptions:=acStructureAndData` 一样简单的导入,在我看来,现代 Acess 中没有可能的 valid CSV 导入/导出(至少 O365)跨度>
    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 2012-01-16
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多