Я очень новичок в VBA, поэтому я очень полагаюсь на поиск в Интернете.Сейчас я пытаюсь создать расширенный фильтр с использованием ComboBox, где пользователь будет вводить ключевое слово, и оно будет автоматически отображаться в ListBox (извлечение данных в виде пользовательского типа).
Поскольку я не знаю, как это сделать, я искал учебники в Интернете и нашел этот код из https://www.razakmcr.in/2017/10/ms-excell-listbox-search-by-textbox-vba.html. <- именно это я и пытаюсь сделать в точности.Но я заметил, что его лист назван по умолчанию «Лист1».У меня есть лист с именем «DATA STOCK», и я попытался изменить Sheet1 на «DATA STOCK», но получил ошибку.Я хочу попробовать его код, потому что он может помочь.</p>
Вот его код:
Private Sub TextBox1_Change()
Me.TextBox1.Text = StrConv(Me.TextBox1.Text, vbProperCase)
Dim i As Long
Me.ListBox1.Clear
On Error Resume Next
For i = 1 To Application.WorksheetFunction.CountA(Sheet1.Range("A:A"))
a = Len(Me.TextBox1.Text)
If Left(Sheet1.Cells(i, 1).Text, a) = Left(Me.TextBox1.Text, a) Then
Me.ListBox1.AddItem Sheet1.Cells(i, 1).Value
Me.ListBox1.List(ListBox1.ListCount - 1, 1) = Sheet1.Cells(i, 2).Value
End If
Next i
End Sub
То, что я сделал, например: For i = 1 To Application.WorksheetFunction.CountA(Sheet1.Range("A:A"))
до For i = 1 To Application.WorksheetFunction.CountA(("DATA STOCK").Range("A:A"))
В любом случае, вот мой код для ВСЕГО ComboBoxкоторый служит в качестве расширенного фильтра:
Private Sub cmbSearch_Change()
Me.cmbSearch.Text = StrConv(Me.cmbSearch.Text, vbProperCase)
Dim i As Long
Me.listHeader.Clear
On Error Resume Next
For i = 1 To x
a = Len(Me.cmbSearch.Text)
If Left("DATA STOCK").Cells(i, 1).Text, a) = Left(Me.cmbSearch.Text, a) Then
Me.cmbSearch.AddItem Sheet1.Cells(i, 1).Value
Me.cmbSearch.List(listHeader.ListCount - 1, 1) = Sheet1.Cells(i, 2).Value
End If
Next i
'THE FF CODE WILL DISPLAY THE VALUE ON THE LISTBOX FROM THE COMBOBOX SELECTION
x = Sheets("DATA STOCK").Range("A" & Rows.Count).End(xlUp).Row
For y = 2 To x
If Sheets("DATA STOCK").Cells(y, 1).Text = cmbSearch.Value Then
cmbSchema.Text = Sheets("DATA STOCK").Cells(y, 1)
cmbEnvironment.Text = Sheets("DATA STOCK").Cells(y, 2)
cmbHost.Text = Sheets("DATA STOCK").Cells(y, 3)
cmbIP.Text = Sheets("DATA STOCK").Cells(y, 4)
cmbAccessible.Text = Sheets("DATA STOCK").Cells(y, 5)
cmbLast.Text = Sheets("DATA STOCK").Cells(y, 6)
cmbConfirmation.Text = Sheets("DATA STOCK").Cells(y, 7)
cmbProjects.Text = Sheets("DATA STOCK").Cells(y, 8)
UserForm1.listHeader.RowSource = "A" + CStr(y) + ": H" + CStr(y)
Exit For
End If
Next y
End Sub
Можете ли вы помочь мне, как создать расширенный фильтр?