Ms access 在MS Access中修改列表框中的项目列表

Ms access 在MS Access中修改列表框中的项目列表,ms-access,vba,Ms Access,Vba,首先,用户使用黄色部分选择产品。这将为结果部分右侧的下拉框生成信息。用户选择特定产品,Dlookups生成文本框中的值 在下面的表格中,我有一个列表框(当前未显示)。列表框列出了使用属性部分从查询中生成的信息。问题是listbox经常显示来自查询的信息,这些信息与文本框中的任何结果都不匹配。我需要从列表中删除该结果 使用下面给出的代码,它循环遍历每个文本框控件,并检查每个文本框中的值是否与查询结果匹配。如果没有,则从列表框中删除。然而,它似乎不起作用。任何关于本规范哪里出错的建议,或关于如何实

首先,用户使用黄色部分选择产品。这将为结果部分右侧的下拉框生成信息。用户选择特定产品,Dlookups生成文本框中的值

在下面的表格中,我有一个列表框(当前未显示)。列表框列出了使用属性部分从查询中生成的信息。问题是listbox经常显示来自查询的信息,这些信息与文本框中的任何结果都不匹配。我需要从列表中删除该结果

使用下面给出的代码,它循环遍历每个文本框控件,并检查每个文本框中的值是否与查询结果匹配。如果没有,则从列表框中删除。然而,它似乎不起作用。任何关于本规范哪里出错的建议,或关于如何实现相同目标的建议

    Private Sub Command87_Click()
    'Refine Search Results based on the control attributes
        Dim iCtr As Long, valFound As Boolean, frmCtl As Control
        Dim selStr As String

        With Me.ResList
            iCtr = .ListCount
            While iCtr <> 0
                For Each frmCtl In Me.Controls
                    If frmCtl.ControlType = acTextBox Then
                        If .Column(0, iCtr) = frmCtl.Value Then
                            valFound = True
                            Exit For
                        End If
                    End If
                Next
                If Not valFound Then selStr = selStr & .Column(0, iCtr) & ","
                iCtr = iCtr - 1
            Wend
        End With

        If Len(selStr) > 0 Then
            selStr = Left(selStr, Len(selStr) - 1)

            Me.ResList.RowSource = ("Test_Qry")

        End If
End Sub
Private子命令87_Click()
'根据控件属性优化搜索结果
Dim iCtr为长,valFound为布尔,frmCtl为控制
作为字符串的Dim selStr
和我一起去
卢旺达问题国际法庭=.ListCount
卢旺达问题国际法庭
对于Me.控件中的每个frmCtl
如果frmCtl.ControlType=acTextBox,则
如果.列(0,iCtr)=frmCtl.值,则
valFound=True
退出
如果结束
如果结束
下一个
如果未找到,则selStr=selStr和列(0,iCtr)和“,”
卢旺达问题国际法庭=卢旺达问题国际法庭-1
温德
以
如果Len(selStr)>0,则
selStr=左(selStr,Len(selStr)-1)
Me.ResList.RowSource=(“测试”)
如果结束
端接头

通过
selStr
,您似乎拥有了所需的功能,但却什么都没有做。您需要执行以下操作:

Me.ResList.RowSourceType=“值列表”


注意上面的更正,2014年6月2日

谢谢您这么快的回复,我没有注意到这条线没有被使用。当我使用你的解决方案时,它没有产生任何错误,但是没有列出任何结果。当我使用断点运行它时,它将selStr的值显示为“,”。对于初学者,在声明
.RowSource
之前,为
selStr
补足一个值,以便测试最终的UI部分。然后使用
Debug.Print
查找
selStr
未按应有方式加载的原因。可能有很多原因-键入错误、逻辑缺陷、If()的问题。比较…如果您有任何输入,我发现.column有问题。请参阅上面的附加图片。您的列表框的规格必须与代码匹配。您可以了解代码“看到”的内容:在中断模式下,通过输入
?.column(0,1)
?.column(1,0)
等,使用即时窗口检查值。“本地人”窗口可能更好。我刚刚注意到这个。。。编写此代码的人没有考虑在查询中生成的信息(Test_Qry)因此,代码也没有用于比较表单上的结果,因为它没有加载任何用于比较的信息。您是否能够在这方面取得进展?目前还没有,因为我们的注意力已经集中在其他需要尽快完成的项目上,所以它已被放在次要位置。我会看看这周的情况,让你知道。我对这一周仍有疑问。我仍然无法将列表缩小到与表单上的文本框不相等的位置。有什么想法吗?很抱歉,我花了这么长时间才回复你。我收到了其他优先级更高的项目的轰炸。这可能会通过我对我的答案的新更正得到解决。这比以前更好。据统计,名单上有3个,但2个不匹配,一个应该落在后面。相反,它从列表中删除了所有三个。
selStr = Left(selStr, Len(selStr) - 1)
Me.ResList.RowSource = ("Test_Qry")
Me.ResList.RowSourceType = "Table/Query"
Me.ResList.RowSource = selStr