Как искать несколько листов? - PullRequest
0 голосов
/ 25 декабря 2018

Я ищу любой текст в Worksheet2 и отображаю результаты в ListBox1.

Private Sub SearchButton_Click()

    'ListBox1.Clear
    ListBox1.RowSource = ""
    ListBox1.ColumnHeads = False

    'listbox column headers
    Me.ListBox1.AddItem
    For A = 1 To 8
        Me.ListBox1.List(0, A - 1) = Sheet2.Cells(1, A)
    Next A
    Me.ListBox1.Selected(0) = True

    'Populating listbox from search
    Dim i As Long

    For i = 2 To Sheet2.Range("A100000").End(xlUp).Offset(1, 0).Row
        For j = 1 To 8
            H = Application.WorksheetFunction.CountIf(Sheet2.Range("A" & i, "H" & i), Sheet2.Cells(i, j))
            If H = 1 And LCase(Sheet2.Cells(i, j)) = LCase(Me.TextBox2) Or H = 1 And _
                Sheet2.Cells(i, j) = Val(Me.TextBox2) Then
                    Me.ListBox1.AddItem
                    For X = 1 To 8
                        Me.ListBox1.List(ListBox1.ListCount - 1, X - 1) = Sheet2.Cells(i, X)
                    Next X
            End If
       Next j
    Next i

End Sub

Вместо этого я хочу выполнить поиск по нескольким листам, но не знаю, как этого добиться, не меняя полностью код.

1 Ответ

0 голосов
/ 25 декабря 2018

Вам нужно изменить ссылку на Sheet2, если вы хотите просмотреть несколько листов.Там нет никакого способа обойти это.Но это сделает ваш код более гибким.Начните с этого:

Private Sub SearchButton_Click()

'ListBox1.Clear
    ListBox1.RowSource = ""
    ListBox1.ColumnHeads = False

'listbox column headers
 Me.ListBox1.AddItem
 For A = 1 To 8
 Me.ListBox1.List(0, A - 1) = Sheet2.Cells(1, A)
 Next A
 Me.ListBox1.Selected(0) = True

Dim ws As Worksheet             'This is the new line of code where you define your worksheet
Set ws = ActiveWorkbook.Sheet2  'Replace all references below to Sheet2 with this

 'Populating listbox from search
 Dim i As Long

 For i = 2 To ws.Range("A100000").End(xlUp).Offset(1, 0).Row
 For j = 1 To 8
 H = Application.WorksheetFunction.CountIf(ws.Range("A" & i, "H" & i), Sheet2.Cells(i, j))
 If H = 1 And LCase(Sheet2.Cells(i, j)) = LCase(Me.TextBox2) Or H = 1 And _
 ws.Cells(i, j) = Val(Me.TextBox2) Then
 Me.ListBox1.AddItem
 For X = 1 To 8
 Me.ListBox1.List(ListBox1.ListCount - 1, X - 1) = Sheet2.Cells(i, X)
 Next X
 End If
 Next j
 Next i
 End Sub

Теперь, когда вы обобщили свой Sub, вы можете изменить значение ws, повторяя код столько раз, сколько вам нужно.Если это каждый лист вашей рабочей книги, вы можете использовать цикл For Each, например

For Each ws In ActiveWorkbook
    'All your code for the ws here
Next ws

, или заранее определить рабочие листы в массиве.

Dim SheetList(0 to 2) As String
Dim k As Integer

SheetList(0) = "Sheet 2 Name"
SheetList(1) = "Sheet 4 Name"
SheetList(2) = "Sheet 3 Name"
SheetList(3) = "Sheet 6 Name"

For k = LBound(SheetList) To UBound(SheetList)
    ws = ActiveWorkbook.Sheets(SheetList(k))
    'The rest of your code from above
Next k

Выне указали в своем вопросе, сколько листов и как они организованы.Но этих вариантов должно быть достаточно, чтобы вы оказались там, где вы пытаетесь пойти.

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