Access 2010中的多选列表框

时间:2014-08-12 19:57:59

标签: vba ms-access listbox access-vba ms-access-2010

在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中并不是超级大,所以我非常感谢任何建议。

1 个答案:

答案 0 :(得分:2)

最简单的方法是,当您打开表单时,需要按如下方式传递选择条件(只需确保您的' strCriteria'是有效的语法(即" ProjectActivity.Area Like&# 39 *'&#34):

DoCmd.OpenForm "ReportForm", acNormal, ,  strCriteria