在Access 2010中有一个搜索表单,它根据特定条件过滤项目,并以另一种形式打开它们。其中一个标准是未绑定的多选列表框txtArea。数据存储在表ProjectActivity中。还有另一个名为LookupArea的表,它将ProjectActivity按区域划分为North,South或Both(即,在北部和南部区域中具有部分)。
我还有一个查询qrySelectArea:
SELECT DISTINCT Area FROM LookupArea;
这是我尝试使用的代码:
Private Sub OpenReport_Click()
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim varItem As Variant
Dim strCriteria As String
Dim strSQL As String
Set db = CurrentDb()
Set qdf = db.QueryDefs("qryLookupArea")
If Me!txtArea.ItemsSelected.Count > 0 Then
For Each varItem In Me!txtArea.ItemsSelected
strCriteria = strCriteria & "ProjectActivity.Area = " & Chr(34) _
& Me!.ItemData(varItem) & Chr(34) & "OR "
Next varItem
strCriteria = Left(strCriteria, Len(strCriteria) - 3)
Else
strCriteria = "ProjectActivity.Area Like '*'"
End If
strSQL = "SELECT * FROM ProjectActivity " & _
"WHERE " & strCriteria & ";"
qdf.SQL = strSQL
DoCmd.OpenQuery "qryLookupArea"
DoCmd.Close acForm, "Search Form"
DoCmd.Open "ReportForm", acNormal
DoCmd.Close acQuery, "qryLookupArea"
End Sub
当我单击OpenReport按钮时,查询运行(我可以在报表打开时在后台看到它)但报表表单显示所有项目,无论我如何过滤它。我在VBA中并不是超级大,所以我非常感谢任何建议。
答案 0 :(得分:2)
最简单的方法是,当您打开表单时,需要按如下方式传递选择条件(只需确保您的' strCriteria'是有效的语法(即" ProjectActivity.Area Like&# 39 *'&#34):
DoCmd.OpenForm "ReportForm", acNormal, , strCriteria