我试图从单个文本框中获取多个用户名,然后搜索数据库以列出用户名有权访问的所有部分,然后将该数据导出到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
任何有关正确方向的帮助,建议或观点都将不胜感激!
答案 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对象xlWork
,xlSheet
,CopyFromRecordset
将允许您保留模板格式,您将能够创建新的工作表,工作簿,进行多个数据传输,复制/设置格式,验证等 - 使用所有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对象库