-1

Я пытаюсь заполнить список со строками, которые соответствуют выделению в выпадающем списке (в столбце A)

Я получаю эту ошибку, когда достигаю записи, у которой есть совпадение в ошибке времени выполнения рабочего листа run-time error '-2147352571 (80020005)':Type mismatch

Я пытаюсь найти диапазон для соответствующих значений, а затем добавить их в список, если их нет, ничего не делать. Но, кажется, когда есть совпадение, я получаю эту ошибку, VBA не мое, немного растерянный. Пожалуйста помоги.

Private Sub ComboBox3_Change()
    Set Rng = Sheets("ActionItems").Range("A2:A50").Find(what:=Me.ComboBox3.Value)
    If Rng Is Nothing Then
        ListBox3.Value = ""
    Else
       ListBox3.AddItem Sheets("ActionItems").Range("B2:C8")
  End If
End Sub

2 ответа2

0

ListBox3.AddItem:

  • Для списка из одного столбца добавляет один элемент (одну ячейку) в список
  • Для списка из нескольких столбцов добавляет строку в список

поэтому вы не можете добавить несколько ячеек из Range("B2:C8")

Есть 2 варианта:


Работать с .ListFillRange который принимает строку (адрес диапазона)

Private Sub ComboBox3_Change()
    Dim rng As Range

    With Sheets("ActionItems")

        Set rng = .Range("A2:A5").Find(What:=Me.ComboBox3.Value)

        ListBox3.ListFillRange = IIf(rng Is Nothing, vbNullString, .Range("B2:C8").Address)

    End With
End Sub

Или же:

Private Sub ComboBox3_Change()
    Dim rng As Range, itm As Variant, i As Long

    With Sheets("ActionItems")

        Set rng = .Range("A2:A5").Find(What:=Me.ComboBox3.Value)

        'ListBox3.Clear    'This depends on how you populated the listbox
        ListBox3.ListFillRange = vbNullString

        If Not rng Is Nothing Then
            For Each itm In .Range("B2:C8")
                ListBox3.AddItem itm
            Next
        End If

    End With
End Sub
0

Благодаря Полу, я с тех пор пошел в другом направлении. Я не мог заставить комбобокс работать так, как я хотел. С тех пор я изменил это на текстовое поле, как показано ниже. То, что я пытаюсь сделать, - это разрешить пользователю вводить текстовое поле и отображать в нем все совпадающие результаты, если таковые имеются. Новый код, который у меня есть, найдет один результат и выделит его, но я не могу получить список, чтобы отфильтровать видимые результаты, не зная, как это сделать. Это также моя первая попытка в VBA, поэтому, пожалуйста, держитесь со мной.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .