将表单链接到多个列表框

时间:2014-11-23 20:44:03

标签: access-vba ms-access-2010

我有一个包含三个列表框和一个子表单的主表单。我想建立一个例程,允许我切换子表单和三个列表框之间的链接。这可能吗?或者我是否必须创建相同子表单的三个副本并隐藏两个副本而另一个副本被激活?

实际上,我的表单将如下工作:子表单包含参与项目的人员的记录列表,他们的具体角色以及他们来自哪个内部团队。我想使用三个列表框来允许用户通过以下任一方式过滤此表单:

(1)所有参加者来自某个团队 (2)所有参与者的角色(头衔) (3)按参与者名称过滤

我不知道如何重新链接子表单上的过滤器,以便当用户从过滤器传递到过滤器时,它从列表框更改为列表框。

使用Krish的建议作为一个简单的测试我正在尝试下面的代码但是在记录源行上得到一个编译错误消息,说明找不到方法或数据成员..不知道是什么这意味着:

Private Sub lstRoles_AfterUpdate()

Dim SQL_GET As String
SQL_GET = "SELECT * from tblProjectGovernanceResources where ((role like '" & lstRoles.Value & "')"
Me.frmProjectGovernanceResources.RecordSource = SQL_GET

End Sub

3 个答案:

答案 0 :(得分:1)

您可以通过listbox1.value从列表框中检索所选值。 正如Wayne G指出的那样。您将在listbox_after_update事件中添加代码以更新子表单的记录源。

类似的东西:

dim SQL_GET as string
sql_get = "SELECT * from tbl_myTAble where ((condition like '" & listbox1.value & "') OR (condition2 like '"& listbox2.value &"') OR (condition3_number like "& listbox3.value &"))

me.mysubform.recordsource = sql_Get

显然你需要根据你的要求改进它。 尝试这个并获得更好的答案,生成你目前编码的内容..

答案 1 :(得分:1)

我为最简单的版本创建了一些代码。这意味着您的所有列表框都具有“多选”功能。属性设置为'无' (这意味着您无法在列表中选择多个项目,也无法通过再次点击来取消选择项目。我在最后添加了一些代码,以便您可以看到如何使用不同的多选选项。

我的表单有三个列表框,一个子表单和两个按钮。一个按钮将清除所有列表框中的所有选择。另一个按钮将过滤器应用于子表单。

Option Compare Database
Option Explicit

'*** NOTE!!! THIS CODE ASSUMES YOU HAVE SET YOUR LISTBOX PROPERTY to 'NONE'.

' IF YOU SET 'MULTI SELECT' To 'SIMPLE' or 'EXTENDED', you MUST use different code to find all selected items.

Dim strWhereTeam        As String
Dim strWhereRole        As String
Dim strWhereParticipant As String

Private Sub cmdClear_Click()
' Clear all selections in all listboxes
Dim i   As Integer
    For i = 0 To Me.lstParticipant.ListCount        'Deselect ALL rows in Listbox
        lstParticipant.Selected(i) = False
    Next i
    For i = 0 To Me.lstRole.ListCount               'Deselect ALL rows in Listbox
        lstRole.Selected(i) = False
    Next i
    For i = 0 To Me.lstTeam.ListCount               'Deselect ALL rows in Listbox
        lstTeam.Selected(i) = False
    Next i
    strWhereTeam = ""
    strWhereRole = ""
    strWhereParticipant = ""
    Me.MySubForm.Form.Filter = ""                   ' Reste filter to NONE
    Me.MySubForm.Form.FilterOn = False
End Sub

Private Sub cmdFilter_Click()
'Build Filter (concatenate three selections)
Dim strFilter   As String
    strFilter = ""
    If strWhereTeam & "" <> "" Then
        strFilter = strWhereTeam
        If strWhereRole & "" <> "" Then
            strFilter = strFilter & " AND " & strWhereRole
            If strWhereParticipant & "" <> "" Then
                strFilter = strFilter & " AND " & strWhereParticipant
            End If
        Else
            If strWhereParticipant & "" <> "" Then
                strFilter = strFilter & " AND " & strWhereParticipant
            End If
        End If
    ElseIf strWhereRole & "" <> "" Then
        strFilter = strWhereRole
        If strWhereParticipant & "" <> "" Then
            strFilter = strFilter & " AND " & strWhereParticipant
        End If
    ElseIf strWhereParticipant & "" <> "" Then
        strFilter = strWhereParticipant
    End If

    If strFilter = "" Then
        Me.MySubForm.Form.Filter = ""
        Me.MySubForm.Form.FilterOn = False
    Else
        Me.MySubForm.Form.Filter = strFilter
        Me.MySubForm.Form.FilterOn = True
    End If
End Sub

Private Sub lstParticipant_Click()
    strWhereParticipant = "[Participant] = '" & Me.lstParticipant.ItemData(Me.lstParticipant.ListIndex) & "'"
    Debug.Print strWhereParticipant
End Sub

Private Sub lstRole_Click()
    strWhereRole = "[Role] = '" & Me.lstRole.ItemData(Me.lstRole.ListIndex) & "'"
    Debug.Print strWhereRole
End Sub

Private Sub lstTeam_Click()
    If Me.lstTeam.MultiSelect <> 0 Then
        MsgBox "You have set the 'Multi Select' property to either Simple or Extended. This code may not work!", vbOKOnly + vbCritical, "ListBox MultiSelect not 'None'"
    End If
    strWhereTeam = "[Team] = '" & Me.lstTeam.ItemData(Me.lstTeam.ListIndex) & "'"
    Debug.Print strWhereTeam
    'Simple_Code
End Sub

'' Sample code if set 'Multi Select' to 'Simple' or 'Extended'
'Sub Simple_Code()
'    Dim var       As Variant
'    strWhereTeam = ""
'    For Each var In Me.lstTeam.ItemsSelected
'        strWhereTeam = strWhereTeam & "[Team] = '" & Me.lstTeam.ItemData(var) & "' OR "
'    Next var
'    strWhereTeam = "(" & left(strWhereTeam, Len(strWhereTeam) - 4) & ")"
'    Debug.Print strWhereTeam
'End Sub

答案 2 :(得分:0)

非常感谢!这一切都做到了!

Private Sub lstRoles_AfterUpdate()

Dim SQL_GET As String SQL_GET =“SELECT * from tblProjectGovernanceResources where([role] ='”&amp; lstRoles.Value&amp;“')”

Me.frmProjectGovernanceResources.Form.RecordSource = SQL_GET

End Sub