Access + VBA + SQL - 如何将多个查询导出到一个Excel工作簿中,但是,多个工作表使用表中的条件

时间:2014-01-21 06:44:50

标签: sql excel vba ms-access-2007

我需要一些帮助才能将多个查询导出到一个Excel工作簿中,但是,多个工作表?使用MS Access VBA中的表中的条件

ATTACHED IS DB供参考。

表名:Tbl_Final(下面列出的列)

  • 系统
  • 用户ID
  • 用户类型
  • 状态
  • 工作职位

根据表“Tbl_Final”(下面的SQL查询)中“System”列中的Unique值,我需要创建INDIVIDUAL excel文件并将其导出到文件夹。 例:         SELECT TBL_FINAL.System,TBL_FINAL。[User ID],TBL_FINAL。[User Type],TBL_FINAL.Status,TBL_FINAL。[Job Position]         来自TBL_FINAL         WHERE(((TBL_FINAL.System)=“OS / 400”));

    SELECT TBL_FINAL.System, TBL_FINAL.[User ID], TBL_FINAL.[User Type], TBL_FINAL.Status, TBL_FINAL.[Job Position]
    FROM TBL_FINAL
    WHERE (((TBL_FINAL.System)="Tab"));

谷歌搜索后,我设法找到符合标准的代码。但遇到了一些障碍:(

请求帮助!!

===================================     选项比较数据库

Private Sub Command1_Click()

    Dim strSQL As String
    Dim dbs As Database
    Dim qdf As QueryDef
    strQry = "REPORT_QUERY"

    Set dbs = CurrentDb
    Set qdf = dbs.CreateQueryDef(strQry)

    strSQL = "SELECT System, [User ID], [User Type], [Status] FROM TBL_FINAL WHERE System = 'OS/400'"
    qdf.SQL = strSQL
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel11, _
        strQry, "C:\Program Files\Export\GENERAL_EXPORT.xls", True, _
        "Sheet1"

    strSQL = "SELECT System, [User ID], [User Type], [Status] FROM TBL_FINAL WHERE System = 'MySys'"
    qdf.SQL = strSQL
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel11, _
        strQry, "C:\Program Files\Export\GENERAL_EXPORT.xls", True, _
        "Sheet2"

    DoCmd.DeleteObject acQuery, strQry

End Sub

1 个答案:

答案 0 :(得分:2)

以下VBA代码适用于我,创建包含多个工作表(.xlsxmySheet1)的新Excel工作簿(mySheet2文件):

Option Compare Database
Option Explicit

Sub ExportToXlsx()
    Dim cdb As DAO.Database, qdf As DAO.QueryDef
    Set cdb = CurrentDb

    Const xlsxPath = "C:\Users\Gord\Desktop\foo.xlsx"

    ' create .xlsx file if it doesn't already exist, and add the first worksheet
    Set qdf = cdb.CreateQueryDef("mySheet1", _
            "SELECT * FROM Clients WHERE ID Between 1 And 5")
    Set qdf = Nothing
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "mySheet1", xlsxPath, True
    DoCmd.DeleteObject acQuery, "mySheet1"

    ' file exists now, so this will add a second worksheet to the file
    Set qdf = cdb.CreateQueryDef("mySheet2", _
            "SELECT * FROM Clients WHERE ID Between 6 And 10")
    Set qdf = Nothing
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "mySheet2", xlsxPath, True
    DoCmd.DeleteObject acQuery, "mySheet2"

    Set cdb = Nothing
End Sub

请注意,工作表的名称取自要导出的查询(或表)的名称。如果Excel文件中不存在具有该名称的工作表,则会添加该工作表。