2017-09-15 5 views
0

私は、テキストボックスとリストボックスを持つユーザーフォームを持っています。私は、ユーザーがテキストボックスにテキストを入力することができ、その入力に基づいてリストボックスフィルタの結果を持たせたいと思います。フィルターTextBoxテキストからListBox Excelで一致する結果のみ

これまでのところ、私はListBoxをリスト内で強調表示し、一致しない結果をフィルタリングしないようにしました。私はまた、複数の一致するレコードを特定せず、これを実現するために何を追加する必要があるのか​​わからない、自分のコードの問題にぶつかってきました。

Private Sub TextBox3_Change() 
     'searches ListBox3 for match and hightlights result. Need to filter results. 
    Dim i As Long 
    Dim sFind As String 

    sFind = Me.TextBox3.Text 

    If Len(sFind) = 0 Then 
     Me.ListBox3.ListIndex = -1 
     Me.ListBox3.TopIndex = 0 
    Else 
     For i = 0 To Me.ListBox3.ListCount - 1 
      If UCase(Left(Me.ListBox3.List(i), Len(sFind))) = UCase(sFind) Then 
       Me.ListBox3.TopIndex = i 
       Me.ListBox3.ListIndex = i 
       Exit For 
      End If 
     Next i 
    End If 
End Sub 
+0

あなたの質問や、あなたのコードどちらも、あなたのリストボックス場合や、以前の選択をクリアするには、複数の選択を許可するかどうかを示します。また、リストボックスをクリックして選択するのではなく、テキストボックスに選択範囲を入力する理由も不思議です。 – Variatus

+0

私の質問は、どのように結果に複数の選択を許可するのですか?リストボックスを、それが添付されているrowsourceのための一種の検索ツールとして機能させたい。したがって、ユーザがテキストボックスに入力すると、一致する結果のみがリストに表示されます – user3795654

+0

ListBoxで複数の選択を許可するには、 'MultiSelect'プロパティを' frmMultiSelectMulti'または 'frmMultiSelectExtended'に設定する必要があります。しかし、私はあなたのワークフローを理解していません。 TextBoxに複数回単語を入力して、それぞれをListBoxの選択項目に追加することを意味しますか?その場合、TextBoxの代わりに同じRowSourceにリンクされたComboBoxを使用してみませんか?どのようにListBoxまたはすべてで1つの項目を選択解除するつもりですか? – Variatus

答えて

1

textbox3を終了するときに機能するこのコードを使用してください。そうしないと、入力中にフィルタリングが行われ、エラーが発生する可能性があります。

試合は

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
For i = ListBox1.ListCount - 1 To 0 Step -1 
    If Not ListBox1.List(i) = TextBox3 Then ListBox1.RemoveItem (i) 
Next i 
End Sub 

正確で、ループがそれ以外の場合はエラーが表示され、再帰ループで作られている場合。

部分一致のために

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
For i = ListBox1.ListCount - 1 To 0 Step -1 
    If InStr(1, ListBox1.List(i), TextBox3) = 0 Then ListBox1.RemoveItem (i) 
Next i 
End Sub 

Found a better code to filter a listbox.

関連する問題