首页 > 解决方案 > 我想搜索每个工作表中的每一行以查找文本,然后返回整行数据

问题描述

我有一个包含大约 100 个工作表的工作簿,其中包含 3 个字母代码作为标题。我想遍历每个工作表,并在每个工作表中,遍历第 2 列(“b”),看看任何给定行中的单元格是否包含单词“Total”,如果有,则跳到下一行,如果有在第 11 列之前不要复制该行并将其粘贴到指定的工作表上。这似乎没有输出任何东西,我想知道我哪里出错了?下面的编辑代码,没有更多的错误消息。

Sub Charges()

Dim ws As Worksheet, r As Range, rw As Long

Set wb = ThisWorkbook.Sheets
Set a = ThisWorkbook.ActiveSheet
Set b = wb("Output")



    For Each ws In wb
        rw = 2
        If Len(ws.Name) = 3 Then
            For Each r In a.Range("B3").CurrentRegion.Columns(1).Cells
                If InStr(1, r.Value, "Total") < 0 Then
                    r = r + 1
                    With a
                        .Range(Cells(r, 2), Cells(r, 11)).Copy b.Cells(r, 2)
                    End With
                End If
            Next r
        End If
    Next ws

End Sub

有人可以帮忙吗?Lmk 如果您需要澄清。

标签: excelvba

解决方案


我认为您引用了不是您想要的工作表。

Sub Charges()
    Dim wb As Workbook
    Set wb = ThisWorkbook

    Dim b As Worksheet
    Set b = wb.worksheets("Output")

    Dim rw As Long
    rw = 2

    Dim ws As Worksheet
    For Each ws In wb.Sheets
        If Len(ws.Name) = 3 Then
            Dim r As Range
            For Each r In ws.Range(ws.Cells(3, 2), ws.Cells(ws.Rows.Count, 2).End(xlUp)).Cells
                If InStr(1, r.Value, "Total") < 1 Then
                    With ws
                        .Range(.Cells(r.Row, 2), .Cells(r.Row, 11)).Copy b.Cells(rw, 2)
                        rw = rw + 1
                    End With
                End If
            Next r
        End If
    Next ws
End Sub

推荐阅读