我有一些代码是从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循环中从“导出查询”复制并修改的,以基于字符串值选择数据。该代码可以工作,尽管问题是当它运行时会在...中创建查询...
据我所知,如果不修改TransferSpreadsheet
查询本身的SQL或使用其他查询,就无法使用SalesData
方法来提取SalesData
查询的参数化版本。选择标准应用于SalesData
返回的数据。
感谢此处的输入,似乎唯一的方法是操作数据库中的现有查询或在VBA脚本中创建查询,然后在最后将其删除。