访问VBA循环以导出Excel文件

问题描述 投票:0回答:2

我有一些代码是从Export Query in VBA loop to select data based on String Value复制并修改的>

该代码有效,尽管问题在于,它在运行时会在数据库中创建查询,然后将其删除。如果代码中断了一半,则此查询仍在数据库中。因此,当代码再次运行时,它会显示一条错误消息,提示它无法创建查询,因为它已经存在。

在数据库中创建的查询被命名为“ Select * from SalesData”

目的是我有一个名为“ SalesData”的查询,其中包含许多国家/地区的销售信息。我想在不创建任何其他Access对象的情况下将每个国家/地区的所有数据导出到一个Excel文件中。是否可以仅在VBA中过滤现有查询而无需创建临时对象?

任何人都可以建议对以下代码进行任何修改以实现这一目标吗?

Sub TEST()
Dim db As DAO.Database
Set db = CurrentDb()

Dim rs1 As DAO.Recordset
Set rs1 = db.OpenRecordset("Select Distinct Country From SalesData")

Dim v As String
Dim strQry As String
Dim qdfTemp As DAO.QueryDef
Dim strQDF As String

strQDF = "select * from SalesData"

Do While Not rs1.EOF
    v = rs1.Fields(0).Value

    strQry = "SELECT * FROM SalesData WHERE Country = '" & v & "'"

    Set qdfTemp = CurrentDb.CreateQueryDef(strQDF, strQry)
    qdfTemp.Close
    Set qdfTemp = Nothing

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _
    strQDF, "C:\Users\me\Desktop\VBA_TEST\" & v & ".xlsx", True

    CurrentDb.QueryDefs.Delete strQDF
    rs1.MoveNext
Loop

rs1.Close

 End Sub

我有一些代码是我在VBA循环中从“导出查询”复制并修改的,以基于字符串值选择数据。该代码可以工作,尽管问题是当它运行时会在...中创建查询...

vba ms-access
2个回答
1
投票

据我所知,如果不修改TransferSpreadsheet查询本身的SQL或使用其他查询,就无法使用SalesData方法来提取SalesData查询的参数化版本。选择标准应用于SalesData返回的数据。


0
投票

感谢此处的输入,似乎唯一的方法是操作数据库中的现有查询或在VBA脚本中创建查询,然后在最后将其删除。

© www.soinside.com 2019 - 2024. All rights reserved.