搜索框-多个工作表

时间:2018-12-25 12:51:45

标签: excel vba excel-vba worksheet search-box

我搜索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 :(得分:1)

如果要查看多张图纸,则必须将引用更改为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

您没有在问题中指定哪种类型的工作表或组织方式。但是,这些选择应该足以让您到达尝试的位置。