Как изменить имя «Лист1» на собственное имя электронной таблицы, например «AAA BBB»? - PullRequest
0 голосов
/ 03 февраля 2019

Я очень новичок в 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

Можете ли вы помочь мне, как создать расширенный фильтр?

1 Ответ

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

Sheet1 в этом примере - это кодовое имя листа.

На вашем листе DATA STOCK также есть кодовое имя, и, скорее всего, это не DATA STOCK.Найдите его в дереве проекта и используйте вместо Sheet1.

enter image description here

В качестве альтернативы используйте Worksheets("DATA STOCK") вместо Sheet1, нотогда ваш код будет зависеть от пользователей, не переименовывающих лист.

...