在尝试导出到Excel时,访问SQL输入参数值

时间:2016-01-27 12:02:56

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

我正在尝试运行此SQL语句,然后将结果导出到excel电子表格。我已经浏览了互联网并找到了这个,这对其他用户来说似乎很有用。

它运行但是要求我输入参数值"链接到" selecteduser"在代码的第4行,消息框显示在代码从此处开始的位置:DoCmd.TransferSpreadsheet。如果单击“确定”,则会创建Excel工作表,但除了数据库中表中所选列的标题外,没有任何内容。如果我将有效数据放入文本框并按确定,则会创建excel电子表格并显示正确的数据。

我知道ComboBox中的选定数据已经存储,因为如果我执行一个消息框,它会显示组合框中的选定数据。

任何想法?很明显,数据没有通过某个地方,但我无法看到。

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

selecteduser = Me.Combo6.Column(0)

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)=selecteduser));"
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\prc93\Desktop\test.xls", True

DoCmd.DeleteObject acQuery, strQry

End Sub

1 个答案:

答案 0 :(得分:1)

查询中的selecteduser需要在引号之外。因为它是一个字符串,它需要在单引号中,如'selecteduser'。现在,如果您使用msgbox查询,您应该会看到selecteduser等于您的column (0)。你确定selecteduser需要是一个字符串而不是一个数字,例如long

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

selecteduser = Me.Combo6.Column(0)

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)='" & selecteduser & "'));"
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\prc93\Desktop\test.xls", True

DoCmd.DeleteObject acQuery, strQry

End Sub