Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Access+VBA+SQL-如何将多个查询导出到一个excel工作簿中,但使用表中的条件导出多个工作表_Sql_Excel_Vba_Ms Access 2007 - Fatal编程技术网

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

Access+VBA+SQL-如何将多个查询导出到一个excel工作簿中,但使用表中的条件导出多个工作表,sql,excel,vba,ms-access-2007,Sql,Excel,Vba,Ms Access 2007,我需要一些关于将多个查询导出到一个excel工作簿的帮助,但是,多个工作表?使用MS Access VBA中表格中的条件 附件为DB供参考 表名:Tbl_最终列如下 系统 用户ID 用户类型 地位 职位 根据下面表Tbl_Final SQL query中列系统中的唯一值,我需要创建单个excel文件并将其导出到文件夹。 例子: 选择TBL_FINAL.System,TBL_FINAL.[用户ID],TBL_FINAL.[用户类型],TBL_FINAL.Status,TBL_FINAL.[职位]

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

附件为DB供参考

表名:Tbl_最终列如下 系统 用户ID 用户类型 地位 职位 根据下面表Tbl_Final SQL query中列系统中的唯一值,我需要创建单个excel文件并将其导出到文件夹。 例子: 选择TBL_FINAL.System,TBL_FINAL.[用户ID],TBL_FINAL.[用户类型],TBL_FINAL.Status,TBL_FINAL.[职位] 来自TBL_决赛 其中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以下VBA代码适用于我,创建了一个新的Excel工作簿.xlsx文件,其中包含多个工作表mySheet1和mySheet2:

选项比较数据库 选项显式 次级出口LSX Dim cdb作为DAO.Database,qdf作为DAO.QueryDef 设置cdb=CurrentDb Const xlsxPath=C:\Users\Gord\Desktop\foo.xlsx '如果.xlsx文件不存在,则创建该文件,并添加第一个工作表 设置qdf=cdb.CreateQueryDefmySheet1_ 从ID介于1和5之间的客户端选择* 设置qdf=无 DoCmd.transfer电子表格acExport,acSpreadsheetTypeExcel12Xml,mySheet1,xlsxPath,True DoCmd.DeleteObject acQuery,mySheet1 '文件现在存在,因此这将向该文件添加第二个工作表 设置qdf=cdb.CreateQueryDefmySheet2_ 从ID介于6和10之间的客户端选择* 设置qdf=无 DoCmd.transfer电子表格acExport,acSpreadsheetTypeExcel12Xml,mySheet2,xlsxPath,True DoCmd.DeleteObject acQuery,mySheet2 设置cdb=无 端接头
请注意,工作表的名称取自要导出的查询或表的名称。如果Excel文件中不存在具有该名称的工作表,则将添加该工作表。

有趣的是,此DoCmd.TransferSpreadsheet acExport、acSpreadsheetTypeExcel12、Table4、test.xlsx、True DoCmd.TransferSpreadsheet acExport、acSpreadsheetTypeExcel12、Query6、test.xlsx、True将在test.xlsx中创建两个新工作表,即使文件已经存在。新工作表将根据查询或表名命名。我经常使用它进行调查分析。@Remou是的,这是真的,我的代码就是这么做的。我在回答中又添加了一些评论以澄清问题。谢谢。嗨,Gord,使用上面的代码,我能够将excel导出到路径中硬编码的路径。我能够找到提示用户选择保存导出的文件路径的代码。我想知道,如何将其包含在代码中,并为每个文件附加唯一的系统值。示例:DoCmd.transfer电子表格acExport、acSpreadsheetTypeExcel12Xml、mySheet2、xlsxPath和OS400&,TrueSub FolderPicker Dim fd As Office.FileDialog Dim path As String Dim notCancel As Boolean Set fd=Application.FileDialogmsoFileDialogFolderPicker With fd notCancel=。如果不取消,则显示path=。SelectedItems1 MsgBox选定的文件夹为&path,VBA信息结束,如果以结束结束Sub@user3217907将子FolderPicker更改为函数FolderPicker As String,并使其返回路径值。在主代码中,执行xlsxPath=FolderPicker,然后在最近的评论中尝试修改后的DoCmd.TransferSpreadsheet。如果你被卡住了,那就问一个问题。