簡體   English   中英

VBA/Microsoft Access 宏 - 所有表中的 SELECT,將結果導出到平面文件

[英]VBA/Microsoft Access Macro - SELECT from all tables, export results to flat files

我正在嘗試在 Microsoft Access 中編寫一個宏來完成以下任務:

對於鏈接表列表(ODBC 連接):

- 選擇前 10 條記錄

-將每個查詢的結果導出到 Excel 或 CSV 標題 [table_name] + 后綴的文件,即“tablename1_10”、“tablename2_10”等到指定文件夾

=======================

更新:

=======================

我現在有一個腳本,盡管我之前在 ODBC 連接上出現錯誤,但當我不嘗試聲明 ODBC 連接字符串並聲明“qdf.Open”時,它仍然有效。 下面的宏,對匿名進行了少量編輯:

Sub queryAllTables()
    Dim tables() As String
    tables = Split("<table names>", ",")

    For Each element In tables
        Dim elm As String
        elm = element
        Call sExportTop10(elm, "<folder>", False)
    Next element
End Sub

Sub sExportTop10(strTable As String, strFolder As String, blnExcel As Boolean)
    On Error GoTo E_Handle
    Dim strFile As String
    Dim strSQL As String
    If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\"
    strFile = strFolder & strTable
    strSQL = "SELECT TOP 10 * FROM [" & strTable & "];"

    Dim dbs As DAO.Database
    Dim qdf As DAO.QueryDef

    For Each MyQueryDef In CurrentDb.QueryDefs
        If MyQueryDef.Name = "qdfExport" Then
            CurrentDb.QueryDefs.Delete ("qdfExport")
            Exit For
            End If
            Next

    Set dbs = CurrentDb()
    Set qdf = dbs.CreateQueryDef("qdfExport")
    qdf.ReturnsRecords = False
    qdf.SQL = strSQL
    qdf.OpenRecordSet

    If blnExcel = True Then
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qdfExport", strFile & "_10.xlsx", True
    Else
        DoCmd.TransferText acExportDelim, , "qdfExport", strFile & "_10.csv", True
    End If
sExit:
    On Error Resume Next
    Exit Sub
E_Handle:
    Msg = "Error # " & Str(Err.Number) & " was generated by " _
    & Err.Source & Chr(13) & Err.Description
    MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
    Resume sExit
End Sub

我建議您創建一個導出到 Excel/CSV 的過程,然后您可以每次調用它來進行導出。 此外,您將需要一個名為“qdfExport”的查詢,用於修改 SQL 以獲得前 10 條記錄。 一些 VBA 看起來像:

Sub sExportTop10(strTable As String, strFolder As String, blnExcel As Boolean)
    On Error GoTo E_Handle
    Dim strFile As String
    Dim strSQL As String
    If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\"
    strFile = strFolder & strTable
    strSQL = "SELECT TOP 10 * FROM [" & strTable & "] ORDER BY 1 ASC;"
    CurrentDb.QueryDefs("qdfExport").SQL = strSQL
    If blnExcel = True Then
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qdfExport", strFile & "_10.xlsx", True
    Else
        DoCmd.TransferText acExportDelim, , "qdfExport", strFile & "_10.csv", True
    End If
sExit:
    On Error Resume Next
    Exit Sub
E_Handle:
    MsgBox Err.Description & vbCrLf & vbCrLf & "sExportTop10", vbOKOnly + vbCritical, "Error: " & Err.Number
    Resume sExit
End Sub

然后您將其稱為:

call sExportTop10("tblPrintID","C:\test",False)

這會將名為“tblPrintID”的表中的前 10 條記錄導出到文件夾“C:\test”中的 CSV 文件中。

在過程中,我在 SQL 中使用了ORDER BY 1 ,它確保數據按第一個字段排序,這是主鍵始終位於我的表中的位置。 如果表中沒有順序,則無法保證將使用什么順序。

問候,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM