Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
在VBA循环中导出查询以基于字符串值选择数据_Vba_Loops_Ms Access - Fatal编程技术网

在VBA循环中导出查询以基于字符串值选择数据

在VBA循环中导出查询以基于字符串值选择数据,vba,loops,ms-access,Vba,Loops,Ms Access,我有一个名为TEST的表,下面的代码基于列Territory中的唯一值循环导出查询 代码应该根据列区域中的唯一值将数据导出到excel文件。因此,每个Territory值都有自己的文件 设置sql查询以及如何使用字符串值选择数据时遇到问题: Sub TEST() Dim db As DAO.Database Dim rs1 As DAO.Recordset Dim v As String Set db = CurrentDb() Set rs1 = d

我有一个名为TEST的表,下面的代码基于列Territory中的唯一值循环导出查询

代码应该根据列区域中的唯一值将数据导出到excel文件。因此,每个Territory值都有自己的文件

设置sql查询以及如何使用字符串值选择数据时遇到问题:

Sub TEST()

    Dim db As DAO.Database
    Dim rs1 As DAO.Recordset
    Dim v As String

    Set db = CurrentDb()
    Set rs1 = db.OpenRecordset("Select Distinct Territory From TEST")

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

        **DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, _
        "WHAT SHOULD MY QUERY BE TO USE STRING v?", "C:\Users\me\Desktop\VBA_TEST\" v & ".xls", True**

        rs1.MoveNext
    Loop

    rs1.Close

End Sub
有人可以指导我如何编写查询并连接字符串v,以便它循环输出报告吗


谢谢大家!

我认为您需要使用现有查询,而不仅仅是将查询作为TransferSpreadsheet方法的字符串。这意味着您需要一个临时查询对象来传输电子表格

您可以将变量添加到查询中,方法是将其连接到SQL字符串,确保对于文本字段,在每一侧都包含一个',而对于数字字段,则不使用它

Sub TEST()
    Dim db As DAO.Database
    Dim rs1 As DAO.Recordset
    Dim v As String

    Set db = CurrentDb()
    Set rs1 = db.OpenRecordset("Select Distinct Territory From TEST")

    Dim strQry As String
    Dim qdfTemp As DAO.QueryDef
    Dim strQDF As String
    strQDF = "_TempQuery_"

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

        strQry = "SELECT * FROM TEST WHERE Territory = '" & v & "'"

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

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

        CurrentDb.QueryDefs.Delete strQDF
        rs1.MoveNext
    Loop

    rs1.Close

End Sub