VBA combobox с автозаполнением и поиском по мере ввода - PullRequest
0 голосов
/ 02 октября 2018

У меня есть код ниже, который создает форму пользователя с автозаполнением, которую я скопировал с другого сайта.Я хотел бы изменить это, чтобы включить функцию «поиск по мере ввода».например:

таблица, на которую ссылается поле со списком, состоит из 1 столбца и включает в себя такие элементы:

chevy truck
ford truck
truck
chevy car
ford car
car

В настоящее время, когда пользователь вводит «грузовик», единственным результатом и предложением является «грузовик».и не будет отображать 'chevy truck'

Я бы хотел, чтобы в раскрывающемся списке отображалось что-то вроде этого, когда пользователь ищет "truck"

truck
chevy truck
ford truck

или если пользователь вводит "tr"список покажет:

truck
chevy truck
ford truck

пользовательские типы 'che' ... список показывает:

chevy truck
chevy car

и т. д.

Private Sub OEM_Change()
Dim x, dict
Dim i As Long
Dim str As String
'x = this is where i need help.
Set dict = CreateObject("scripting.dictionary")
str = Me.OEM.Value
    If str <> "" Then
        For i = 1 To UBound(x, 1)
            If InStr(LCase(x(i, 1)), LCase(str)) > 0 Then
                dict.Item(x(i, 1)) = ""
            End If
        Next i
    Me.OEM.List = dict.keys
    Else
    Me.OEM.List = x
    End If
    Me.OEM.DropDown

End Sub

Private Sub UserForm_Initialize()

With Vertical
     .AddItem "vertical1"
     .AddItem "vertical2"
     .AddItem "vertical3"
     .AddItem "vertical4"
     .AddItem "vertical5"
End With

End Sub

Private Sub Vertical_Change()

Dim index As Integer
 index = Vertical.ListIndex

Select Case index
     Case Is = 0
         With OEM
             .RowSource = "Namedrange1"
         End With
     Case Is = 1
         With OEM
             .RowSource = "Namedrange2"
         End With
     Case Is = 2
         With OEM
            .RowSource = "Namedrange3"
         End With
    Case Is = 3
         With OEM
            .RowSource = "Namedrange4"
         End With
    Case Is = 4
         With OEM
            .RowSource = "Namedrange5"
         End With

End Select

End Sub

для справки: часть этого кода взята из этой темы

комбинируемое поле с возможностью поиска со списком предложений для пользовательской формы

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

хорошо, ребята, я понял это.Я обозначил другую переменную как «p».p = vertical.value, затем x = рабочие листы ("sheet2"). range (p) .value.работает отлично.спасибо всем за помощь

0 голосов
/ 03 октября 2018

Автозаполнение при вводе в раскрывающемся списке с кодом VBA

Сначала необходимо вставить поле со списком в рабочую таблицу и изменить его свойства, а затем запустить код VBA для включения автозаполнения.

  1. Перейдите на рабочий лист, который содержит раскрывающийся список, в котором вы хотите, чтобы он был автозаполнен.

  2. Перед вставкой поля со списком необходимо включить вкладку Разработчикна ленте.

1).В Excel 2010 и 2013 щелкните Файл> Параметры.А в диалоговом окне «Параметры» нажмите «Настроить ленту» на правой панели, установите флажок «Разработчик» и нажмите кнопку «ОК».Смотрите скриншот:

2).В Outlook 2007 нажмите кнопку Office> Параметры Excel.В диалоговом окне «Параметры Excel» нажмите «Популярные» на правой панели, затем откройте вкладку «Показать разработчика» на ленте и, наконец, нажмите кнопку «ОК».

Затем нажмите «Разработчик»> «Вставить»> «Поле со списком» в разделе «Элементы управления ActiveX».Смотрите скриншот:

Нарисуйте поле со списком в текущем открытом листе и щелкните его правой кнопкой мыши.Выберите «Свойства» в контекстном меню.

В диалоговом окне «Свойства» необходимо:

1).Измените имя на TempCombo в поле Имя;

2).Укажите необходимый шрифт в поле «Шрифт»;

3).Прокрутите вниз, чтобы выбрать 1-fmMatchEntryComplete в поле MatchEntry;

4).Закройте диалоговое окно «Свойства».

Отключите Режим разработки, щелкнув Разработчик> Режим разработки.

Щелкните правой кнопкой мыши на текущей открытой вкладке листа и выберите «Просмотреть код».Смотрите скриншот:

Убедитесь, что открыт текущий редактор кода рабочего листа, а затем скопируйте и вставьте в него приведенный ниже код VBA.

НЕ ВИДИТЕ, ЧТОБЫ ВСТАВИТЬ КОД В ЗДЕСЬ ПО НЕКОТОРОЙ ПРИЧИНЕ ...

Нажмите Файл> Закрыть и вернуться в Microsoft Excel, чтобы закрыть окно Microsoft Visual Basic для приложений.

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

https://www.extendoffice.com/documents/excel/2401-excel-drop-down-list-autocomplete.html#a1

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