Доступ к VBA Для выполнения нескольких запросов выбора и экспорта в Excel на разных листах - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь экспортировать несколько запросов в один лист 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 разные таблицы, но они мне нужныоба в одном листе.Также как назвать рабочий лист тоже.

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Поскольку вы ищете результаты запросов для вывода один над другим на листе, я мог бы предложить изменить ваш SQL, чтобы объединить результаты двух запросов с использованием 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]

Я бы также предложил использовать оператор амперсанда (&) для конкатенации, так как это всегда будет рассматривать аргументы как строки, тогда как оператор сложения (+) сначала попытается интерпретировать Числовое содержание данных, прежде чем прибегать к объединению, если данные не числовые.

0 голосов
/ 26 июня 2019

Создайте лист в файле и создайте два Именованный диапазон с.

Назовите их, скажем, NamedRangeName1 и NamedRangeName2 .

Затем выполните:

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