Combobox - список фильтров на основе входного текста - PullRequest
0 голосов
/ 13 февраля 2019

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

код должен вытянуть в диапазоне A1: A791 для списка из 790 элементов, которые я хочу включить в выпадающий список.Первоначально фильтр работал, когда я определил статический массив следующим образом:

Sub ComboBox1_Populate(Optional fltr As String)
ComboBox1.List = Filter(Array("qqq", "qqwww", "qqttt", "qwer"), fltr)     
End Sub

Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal 
Shift As Integer)
Call ComboBox1_Populate(ComboBox1.Text)
End Sub

Private Sub UserForm_Initialize()
Call ComboBox1_Populate
End Sub

Однако, когда я вместо этого пытаюсь отфильтровать значения диапазона следующим образом, я получаю ошибку времени выполнения Несоответствие типов 13 со следующим:

Sub ComboBox1_Populate(Optional fltr As String)
ComboBox1.List = Filter(Sheets("DVTest").Cells(2, 1).Resize(790, 10).Value, 
fltr)
End Sub

Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal 
Shift As Integer)
Call ComboBox1_Populate(ComboBox1.Text)
End Sub

Private Sub UserForm_Initialize()
Call ComboBox1_Populate
End Sub

Я ищу совет о том, как получить такую ​​же возможность фильтрации в списке комбинированного списка на основе указанного диапазона, а не статический массив из 4 опций текста.

Спасибоза помощь!

1 Ответ

0 голосов
/ 13 февраля 2019

Согласно документации на функцию фильтра , sourcearray - это одномерный массив строк.

  • Вы явно указываете многомерный массив с Resize(790, 10).
  • И .Value возвращает массив вариантов, а не строк.

После проверки, массив или варианты в порядке, но они должны быть одномерными;поэтому вам придется обработать диапазон, так как даже один столбец приведет к двумерному массиву.Вот что я хотел бы использовать для преодоления разрыва ...

Function RangeToOneDemensionalArray(Target As Range) As Variant
Dim Cell As Range
Dim ResultArr
Dim i As Long

    If Target Is Nothing Then Exit Function
    ReDim ResultArr(Target.Count - 1) As String

    For Each Cell In Target
        ResultArr(i) = Cell.Value
        i = i + 1
    Next

    RangeToOneDemensionalArray = ResultArr
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...