¿Es posible utilizar el filtro automático o buscar en un diccionario?

así que tengo una forma de usuario con comboBox que sirve como un cuadro de búsqueda dynamic.

Los datos que deben buscarse se encuentran en otro libro de trabajo (más de 1200 filas). Para evitar la apertura y el cierre constante de ese libro de trabajo de datos, lo cargo todo en el diccionario durante la inicialización del formulario.

Ahora mi pregunta es: ¿es posible filtrar rápidamente los datos del diccionario (y actualizar el combobox), mientras el usuario está escribiendo o necesito cambiar mi enfoque?

cualquier ayuda sería muy apreciada.

aquí está el código que tengo hasta ahora:

Option Explicit Private emplDict As Object 'all other constants and functions are declared in a separate module named "code" Private Sub btnClose_Click() Unload Me End Sub Private Sub comboSearch_Change() Me.comboSearch.DropDown End Sub Private Sub UserForm_Initialize() Dim xlWS As Worksheet Dim xlWB As Workbook Dim rng As Range Dim lstRw As Long Dim item As Variant Application.Run "code.xlHelper", False ' turn off screen updating, alerts, events Set emplDict = CreateObject("scripting.dictionary") Set xlWB = Workbooks.Open(Filename:=SUB_PLANNING & EMPLOYEE_LIST) Set xlWS = xlWB.Sheets("namen_werknemers") With xlWS lstRw = .Cells(Rows.Count, 1).End(xlUp).Row Set rng = .Range(.Cells(2, 1), .Cells(lstRw, 1)) End With For Each item In rng If Not emplDict.exists(item.Value) Then emplDict.Add item.Text, item.Offset(0, 1).Text End If Next xlWB.Close False Set xlWS = Nothing Set xlWB = Nothing Application.Run "code.xlHelper", True End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Set emplDict = Nothing End Sub 

La clave es usar las claves del diccionario.

Use el método de filtro VBA para devolver una matriz de claves filtradas.

enter image description here

 Private EEDict As Object Private Sub cboEEList_Change() Dim Keys Keys = EEDict.Keys cboEEList.List = Filter(Keys, cboEEList.Text, True, vbTextCompare) cboEEList.DropDown End Sub Private Sub UserForm_Initialize() Dim arData Dim x As Long Set EEDict = CreateObject("scripting.dictionary") arData = Worksheets("Employees").Range("A1").CurrentRegion.Value2 For x = 2 To UBound(arData) EEDict(arData(x, 1)) = arData(x, 2) Next cboEEList.List = EEDict.Keys End Sub 

Obtuve los datos de muestra de: Fusion Tables – Employees.csv

Un enfoque diferente, pero un poco desordenado sería un conjunto de registros, algo como esto, necesitarías agregar los rangos de Excel a él, donde he improvisado algunos valores.

 Option Explicit Private rs As ADODB.Recordset Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Set rfiltered = New ADODB.Recordset rs.Filter = "Value like '" & Chr(KeyAscii) & "*'" If Not rs.EOF Then Range("e1").CopyFromRecordset rs Me.ComboBox1.RowSource = "E1:E10" End If End Sub Private Sub UserForm_Initialize() Set rs = New ADODB.Recordset Dim fieldsArray(1) As Variant Dim values(1) As Variant rs.Fields.Append "Key", adVarChar, 5 rs.Fields.Append "Value", adVarChar, 5 fieldsArray(0) = "Key" fieldsArray(1) = "Value" values(0) = 4 values(1) = "as" rs.Open rs.AddNew fieldsArray, values rs.Update End Sub