从Excel VBA中输入文本框的搜索条件填充列表框

从Excel VBA中输入文本框的搜索条件填充列表框,vba,excel,listbox,userform,Vba,Excel,Listbox,Userform,我曾经发布过这个问题,但是,我认为它太复杂了,我没有很好地解释它。这次我只是以一个简单的用户表单为例 我想通过在文本框中输入搜索条件来填充列表框 我有三个专栏: A列=图书卡号 B列=学生姓名 C列=参考书目 我有一个用户表单: TextBox=txtlcn(用于图书卡号) TextBox=txtpn(学生姓名) TextBox=txtbr(供参考) 命令按钮=cmdfinddetails(查找详细信息) 我想做的是将文本框“txtbr”更改为列表框,这样我就可以查看一个学生是否有多本书借给他们

我曾经发布过这个问题,但是,我认为它太复杂了,我没有很好地解释它。这次我只是以一个简单的用户表单为例

我想通过在文本框中输入搜索条件来填充列表框

我有三个专栏:

A列=图书卡号

B列=学生姓名

C列=参考书目

我有一个用户表单:

TextBox=txtlcn(用于图书卡号)

TextBox=txtpn(学生姓名)

TextBox=txtbr(供参考)

命令按钮=cmdfinddetails(查找详细信息)

我想做的是将文本框“txtbr”更改为列表框,这样我就可以查看一个学生是否有多本书借给他们。这一进程将是:

  • 学生在文本框“txtlcn”中输入他们的图书卡号,然后 单击命令按钮“cmdfinddetails”
  • 代码将搜索该学生的姓名和所有书籍 他们的推荐信已被预订。
  • 图书参考资料将显示在列表框中。
  • 我尝试了很多关于RowSource的事情,但它总是列出每个学生的参考书。下面是我的示例代码

    Private Sub cmdfinddetails_Click()
    Set xSht = Sheets("Library")
            Lastrow = xSht.Range("A" & Rows.Count).End(xlUp).Row
            strSearch = txtlcn.Text
                        Set aCell = xSht.Range("A1:A" & Lastrow).Find
    
    (What:=strSearch, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
    
          If Not aCell Is Nothing And txtpn.Value = "" Then
             GoTo libcardrefvalid      
         Else
    MsgBox "Oops! That Library Card does not exist. Please try again.", Title:="We LOVE Reading ;-)"
    txtlcn.Value = ""
            End If
        Exit Sub
    libcardrefvalid:
    
    row_number = 0
    Do
    DoEvents
    row_number = row_number + 1
    item_in_review = Sheets("Library").Range("A" & row_number)
    If item_in_review = txtlcn.Text Then
    txtpn.Text = Sheets("Library").Range("B" & row_number)
    txtbr.Text = Sheets("Library").Range("C" & row_number)
    End If
    Loop Until item_in_review = ""
    
    End Sub
    
    任何帮助都将不胜感激


    谢谢。

    假设您已经将
    txtbr
    更改为列表框,我可以通过以下添加操作使您的代码正常工作(查找学生姓名并添加引用到
    txtbr
    列表框的所有书籍):

    Private Sub CommandButton1_Click()
    'clears the pupil name (caused an error if not done)
    txtpn.Text = ""
    Set xSht = Sheets("Library")
            Lastrow = xSht.Range("A" & Rows.Count).End(xlUp).Row
            strSearch = txtlcn.Text
                        Set aCell = xSht.Range("A1:A" & Lastrow).Find(What:=strSearch, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
    
          If Not aCell Is Nothing And txtpn.Value = "" Then
             GoTo libcardrefvalid
         Else
    MsgBox "Oops! That Library Card does not exist. Please try again.", Title:="We LOVE Reading ;-)"
    txtlcn.Value = ""
            End If
        Exit Sub
    libcardrefvalid:
    
    row_number = 0
    'clears the listbox so that you have dont have a continuously growing list
    txtbr.Clear
    Do
    DoEvents
    row_number = row_number + 1
    item_in_review = Sheets("Library").Range("A" & row_number)
    If item_in_review = txtlcn.Text Then
    txtpn.Text = Sheets("Library").Range("B" & row_number)
    'Adds the book reference number to the list box
    txtbr.AddItem Sheets("Library").Range("C" & row_number)
    End If
    Loop Until item_in_review = ""
    End Sub
    

    我制作了一个测试用户表单和一些模型数据,这对我来说很有用。希望您也能找到它。

    我会在列中循环查找图书卡号和匹配结果,并将它们存储到一个数组中。然后将数组放入列表框。谢谢Sam。对不起,我对VBA比较陌生,你有没有一个我可以按照你的建议做的例子?谢谢你的时间和快速响应,USFBS工作得很好!我还学到了更多关于VBA的知识!我想在“这个答案很有用”这件事上给你打分,但我需要一个更高的声誉。很高兴能够提供帮助:)