Поиск в многостолбцовом списке с помощью двух текстовых полей, удаление элементов, не соответствующих обоим текстовым полям - PullRequest
0 голосов
/ 30 октября 2019

Я новичок в StackOverflow и новичок в VBA. Мне нужна помощь с пользовательской формой, над которой я работаю. Пользовательская форма имеет текстовое поле 1, используемое для поиска в списке данных, и заполняет список 3, который работает хорошо. В listbox4 после того, как вы наведете курсор мыши на любой из результатов listbox1, результаты теста будут перенесены из другой рабочей таблицы в listbox4, что также хорошо работает.

Моя проблема в том, что я сейчас пытаюсь добавить функцию для ввода начальной даты "textbox2" и конечной даты "textbox3", которая будет выглядеть в столбце 6, где есть даты, для RemoveItems, которые попадают между датами в textbox2& textbox3. Listbox4 имеет 9 столбцов. Код у меня сейчас работает, но не работает должным образом. В столбце Listbox4 6 будет отображаться дата 14.10.2009, и если я выполню поиск textbox2 «10/4/2019» и textbox3 «10/11/2019», которые также находятся в списке дат, будут удалены все элементы. кроме 10/14/2019 и 9/9/9999 и показать все 10/4/2019 и 10/11/2019, как следует.

Если я выполняю поиск textbox2 «10/11/2019» и textbox3 «14.10.2009», он удаляет все элементы, кроме 9/9/9999, и отображает все элементы 10/11/2019 и 10/14 /2019, как и должно быть. С первым поиском я не должен был остаться в списке 14.10.2009, а также 9.09.999. Также мне не нравится, когда я ищу разные годы, например textbox2 "8/8/2018" и textbox3 "4/4/2019". Я попытался отформатировать дату, попытался посмотреть на целочисленное значение даты. Я пробовал другой код, который я вообще не мог заставить работать, такой как сравнительный операнд / Критерии 1 / Критерии 2. Я пробовал много других вариантов, но приведенный ниже код является наиболее близким к тому, чтобы заставить его работать.

Даты до запуска кода для удаления элементов

enter image description here

Даты после запуска кода

enter image description here

Код для просмотра столбца 6 и удаления элементов, не соответствующих textbox2 и textbox3.


Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Dim i As Long
With Me.ListBox4
    For i = Me.ListBox4.ListCount - 1 To 0 Step -1
        If Not .Column(6, i) >= CDate(Me.TextBox2.value) And (.Column(6, i) <= CDate(Me.TextBox3.value) Then
            Me.ListBox4.RemoveItem (i)
        End If
            Next i
        End With

   Me.TextBox2.SetFocus
End Sub

...