[英]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.