У меня есть несколько списков UserForm, которые нуждаются в функции автозаполнения для частичных совпадений. У меня более 2000 записей, и частичное совпадение строк является основополагающим для пользователей, чтобы найти правильную запись.
Практический пример:
+------------------------+
| Food Market Groceries |
+------------------------+
| Matt's Food Inc |
+------------------------+
| Groceries for Mamas |
+------------------------+
| Alabama Veggies Market |
+------------------------+
Когда мы начинаем вводить "ма", все опции с "ма" должны появиться в раскрывающемся списке. В данном случае "рынок", "Мэттс", "Алабама" и "Мамас".
Это мой код формы. Он работает нормально, мне просто нужна дополнительная помощь ComboBox, чтобы решить эту проблему. Диапазон ComboBox устанавливается в свойствах RowSource и тоже работает отлично.
Private Sub btnSubmit_Click()
Dim sheet As Worksheet
Dim index As Long
Set sheet = ThisWorkbook.Sheets("Folha2")
'get last position
index = LastRow(sheet) + 1
'insert the data
sheet.Range("A" & index) = iniciaisTextBox.Value
sheet.Range("B" & index) = ComboBox1.Value
sheet.Range("C" & index) = TextBox1.Value
sheet.Range("D" & index) = DTPicker1.Value
sheet.Range("E" & index) = DTPicker2.Value
sheet.Range("F" & index) = ComboBox2.Value
sheet.Range("G" & index) = ComboBox3.Value
sheet.Range("H" & index) = ComboBox4.Value
sheet.Range("I" & index) = TextBox4.Value
sheet.Range("J" & index) = TextBox5.Value
sheet.Range("K" & index) = TextBox6.Value
sheet.Range("L" & index) = TextBox7.Value
sheet.Range("M" & index) = TextBox8.Value
sheet.Range("N" & index) = ComboBox5.Value
sheet.Range("O" & index) = TextBox9.Value
sheet.Range("P" & index) = ComboBox6.Value
sheet.Range("Q" & index) = ComboBox7.Value
'clear the form for new insert
clearForm
End Sub
Private Sub clearForm()
Dim ctrl As Control
On Error Resume Next
For Each ctrl In Me.Controls
If InStr(ctrl.Name, "DTPicker") > 0 Then
ctrl.Value = Now
Else
ctrl.Value = ""
End If
Next ctrl
On Error GoTo 0
End Sub
Private Function LastRow(sheet As Worksheet)
Dim rng As Range
Set rng = sheet.Cells
LastRow = Last(1, rng)
End Function
Private Function Last(choice As Long, rng As Range)
Dim lrw As Long
Dim lcol As Long
Select Case choice
Case 1:
On Error Resume Next
Last = rng.Find(What:="*", _
After:=rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Select
End Function
Какие-нибудь мысли?
Заранее спасибо.