首页 > 解决方案 > 访问 VBA 运行多个选择查询并导出到不同工作表上的 excel

问题描述

我正在尝试将多个查询导出到同一个 excel 工作表并命名该 excel 工作表。我可以让它导出到同一个电子表格中的多个工作表,但不是同一个。

选项比较数据库

Sub validate()

Dim db As Database
Set db = CurrentDb
Dim strFolder As String
Dim rst1 As DAO.Recordset
Dim rst2 As DAO.Recordset
Dim qry1 As String
Dim qry2 As String

qry1 = "SELECT DISTINCT IIf(IsDate([models].[startdate])=False,'No' + '  ' + [models.Startdate],'Yes') AS StartDate, IIf(IsDate([models].[Enddate])=False," & _
            "'No' + '  ' + [models.Enddate],'Yes') AS EndDate FROM [Models]"
 db.CreateQueryDef "temp1", qry1



qry2 = "SELECT DISTINCT Left([pages.imagefile],InStr([pages.imagefile],'_')-1) AS Pages_Series, " & _
       "Left([parts.imagefile],InStr([parts.imagefile],'_')-1) AS Parts_ImgSeries, IIf([Pages_Series]=[Parts_ImgSeries],'Yes','No') AS Expr1 FROM [Pages], [Parts]"

 db.CreateQueryDef "temp2", qry2



strFolder = CurrentProject.Path & "\"

    DoCmd.TransferSpreadsheet acExport, , "temp1", strFolder & "Validated.xlsx", True
    DoCmd.TransferSpreadsheet acExport, , "temp2", strFolder & "Validated.xlsx", True

  CurrentDb.QueryDefs.Delete "temp1"
  CurrentDb.QueryDefs.Delete "temp2"

End Sub

这会将两个查询放入 2 个不同的工作表中,但我需要将它们都放在同一个工作表中。还有如何命名工作表。

标签: vbams-access

解决方案


由于您正在寻找要在工作表中依次输出查询结果,因此我可能建议更改您的 SQL 以使用 a 组合两个查询union的结果,然后将此单个查询的结果输出到电子表格:

select distinct 
    IIf(IsDate([models].[startdate])=False,'No  ' & [models.Startdate],'Yes') as StartDate, 
    IIf(IsDate([models].[Enddate])=False,'No  ' & [models.Enddate],'Yes') as EndDate,
    null as Expr1
from 
    [Models]
union all
select distinct 
    Left([pages.imagefile],InStr([pages.imagefile],'_')-1) as Pages_Series, 
    Left([parts.imagefile],InStr([parts.imagefile],'_')-1) as Parts_ImgSeries, 
    IIf([Pages_Series]=[Parts_ImgSeries],'Yes','No') as Expr1 
from 
    [Pages], [Parts]

我还建议使用与号运算符( &) 进行连接,因为这将始终将参数视为字符串,而加法运算符 ( +) 将首先尝试解释数据的数字内容,然后再使用连接,如果数据是非数值。


推荐阅读