Access - 使用数组数据创建SQL查询,然后导出到Excel

时间:2016-02-09 16:25:23

标签: sql vba excel-vba ms-access access-vba

我试图从单个文本框中获取多个用户名,然后搜索数据库以列出用户名有权访问的所有部分,然后将该数据导出到Excel电子表格。单个电子表格会很好,但多张电子表格会很好。

我已经设法将数据传输到数组,并将代码导出到Excel电子表格,但是我在vba时刻的知识还远远不足以将它们链接在一起,所以它使用SQL语句搜索表,以获取每个用户拥有的访问信息,然后以某种方式存储它并将其转储到单个电子表格中,或者每次搜索数据库时将其保存到新的电子表格中。

我环顾四周,但无法看到我所看到的方式如何转化为我想要的东西。我想你必须把SQL结果放回到一个数组中,然后以某种方式进行转储以获得优势吗?

我甚至不知道这是否可以在vba中完成。

我目前拥有的代码,我知道该代码在其当前状态下工作:

Private Sub Command12_Click()
Dim strSQL As String
Dim strQry As String
Dim selecteduser As String
Dim db As DAO.Database
Dim Qdf As QueryDef

Users = Me.Text13

Dim usernames() As String

usernames() = Split(Users, ",")

strSQL = "SELECT tblPra.praNo, tblFolder.folder, tblFolder.fullTitle FROM "&_ 
     "tblPra INNER JOIN (tblFolder INNER JOIN tblRelationship ON " &_
     "tblFolder.folderID = tblRelationship.folderID) ON " &_
     "tblPra.praID = tblRelationship.praID " &_
     "WHERE (((tblPra.praNo)='" & usernames & "'));"
strQry = "tempuser"

Set db = CurrentDb
Set Qdf = db.CreateQueryDef(strQry, strSQL)

On Error Resume Next
    DoCmd.DeleteObject acQuery, "strQry"

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, _
   strQry, "C:\Users\name\Desktop\test.xls", True

DoCmd.DeleteObject acQuery, strQry

End Sub

任何有关正确方向的帮助,建议或观点都将不胜感激!

2 个答案:

答案 0 :(得分:3)

您可以使用IN子句:

usernames() = Split(Users, ",")

strSQL = "SELECT tblPra.praNo, tblFolder.folder, tblFolder.fullTitle FROM "&_ 
     "tblPra INNER JOIN (tblFolder INNER JOIN tblRelationship ON " &_
     "tblFolder.folderID = tblRelationship.folderID) ON " &_
     "tblPra.praID = tblRelationship.praID " &_
     "WHERE (((tblPra.praNo) IN ('" & Join(usernames, "','") & "')));"

答案 1 :(得分:0)

要将数据导出到现有Excel模板,您可以使用以下代码:

xlApp

使用Excel对象xlWorkxlSheetCopyFromRecordset将允许您保留模板格式,您将能够创建新的工作表,工作簿,进行多个数据传输,复制/设置格式,验证等 - 使用所有Excel功能。 { "title": "Example Schema", "type": "object", "properties": { "firstName": { "type": "string" }, "lastName": { "type": "string" }, "age": { "description": "Age in years", "type": "integer", "minimum": 0 } }, "required": ["firstName", "lastName"] } 工作得非常快。

此代码需要引用Microsoft Excel 15.0对象库