参数太少...表单搜索导致问题

时间:2015-07-14 21:03:29

标签: sql ms-access access-vba

我有一个从我的查询中导出Excel的表格。在Access中,我有一个运行Query的表单,允许用户根据需要更新Query。如果我使用set参数(不使用表单)运行sub,例如“Austria”,则子工作正常。但是当我使用表格并写入“奥地利”时,我得到了区域信息:

  

3601参数太少。预计1。

问题似乎与HAVING((([游戏类别] .Lottery)= [表格]![TransferToExcel]![listLotteryName])(如果替换为奥地利,则子工作细)

Sub Mysub()
Dim objexcel As Excel.Application
Dim wbexcel As Excel.Workbook
Dim wbExists As Boolean
Dim qdfQUERY2014sales As QueryDef
Dim rsQUERY2014sales As Recordset

Set qdfQUERY2014sales = CurrentDb.QueryDefs("QUERY2014sales")
Set rsQUERY2014sales = qdfQUERY2014sales.OpenRecordset()

Set objexcel = CreateObject("excel.Application")
objexcel.Visible = True


On Error GoTo Openwb
wbExists = False
Set wbexcel =  objexcel.Workbooks.Open("C:\Users\MORTBANKER\Documents\test.xlsm")
wbExists = True

Openwb:
On Error GoTo 0
If Not wbExists Then
    Set wbexcel = objexcel.Workbooks.Add()
End If

CopyToWorkbook wbexcel, rsQUERY2014sales

'need to save the workbook, make it visible or something.
End Sub

Private Sub CopyToWorkbook(objWorkbook As Excel.Workbook, rsQRY As Recordset)
Dim newWorksheet As Excel.Worksheet
Set newWorksheet = objWorkbook.Worksheets.Add()

 With newWorksheet
    .Range("A1").CopyFromRecordset rsQRY   '<-magic happens here!
End With
'Copy stuff to the worksheet here'
End Sub

任何人都有任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果您有一个引用表单控件的查询,并将该查询用作OpenRecordset的数据源,则Access不会解析表单控件并检索其值。相反,它将控件引用视为常规查询参数...这意味着它希望您单独提供参数值。

幸运的是,这很容易做到。由于您QueryDef已打开,只需循环浏览其Pararmeters集合,并为每个集合提供值。

Set qdfQUERY2014sales = CurrentDb.QueryDefs("QUERY2014sales")
Dim prm As DAO.Parameter
For Each prm In qdfQUERY2014sales.Parameters
    prm.Value = Eval(prm.Name)
Next
Set rsQUERY2014sales = qdfQUERY2014sales.OpenRecordset()

这种方法有效,因为Access会根据您的示例告诉您prm.Name&#34; [表单]![TransferToExcel]![listLotteryName]&#34; 。然后Eval("[Forms]![TransferToExcel]![listLotteryName]")将为您提供该控件的值。

实际上,如果您确定查询中只有一个这样的参数,那么您就不需要遍历其Parameters集合。你可以这样做:

With qdfQUERY2014sales
    .Parameters(0).Value = Eval(.Parameters(0).Name)
End With