Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在循环到其他工作表之前,如何重置查找功能结果?_Vba_Excel - Fatal编程技术网

Vba 在循环到其他工作表之前,如何重置查找功能结果?

Vba 在循环到其他工作表之前,如何重置查找功能结果?,vba,excel,Vba,Excel,我想问一下,你是否能帮我完成下面的代码。在我的工作簿中的每一张工作表上都有相同类型的表,但是在每一张工作表上,该表有不同的位置和值。我需要遍历所有工作表,搜索每个工作表上的表值,然后对这些值执行一些其他操作。我使用Find函数来确定表的标题以及随后的表范围。尽管Find函数不能正常工作,因为它会将“Header”单元格的查找地址从第一张工作表保留到每一张工作表。在循环到另一个工作表之前,有没有办法重置找到的标题地址值?先谢谢你 Sub FindInDynamicRanges() Dim wb1

我想问一下,你是否能帮我完成下面的代码。在我的工作簿中的每一张工作表上都有相同类型的表,但是在每一张工作表上,该表有不同的位置和值。我需要遍历所有工作表,搜索每个工作表上的表值,然后对这些值执行一些其他操作。我使用Find函数来确定表的标题以及随后的表范围。尽管Find函数不能正常工作,因为它会将“Header”单元格的查找地址从第一张工作表保留到每一张工作表。在循环到另一个工作表之前,有没有办法重置找到的标题地址值?先谢谢你

Sub FindInDynamicRanges()

Dim wb1 As Workbook
Dim ws As Worksheet
Dim FoundCell, FoundTab, TabEntries As Excel.Range
Dim FirstAddr As String
Dim FirstRow, LastRow As Long

Set wb1 = ThisWorkbook

'Find all occurences of any table value on all sheets in dynamic ranges
For Each ws In wb1.Worksheets
    Set ws = ActiveSheet

    'Find "Header" cell
    Set FoundCell = ws.Columns(2).Find(What:="Header", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    MsgBox FoundCell.Address

    'Set number of first entry row and last entry row
    FirstRow = FoundCell.Row + 1
    LastRow = ws.Cells.Find(What:="*", After:=Range("A1"), LookAt:=xlPart, LookIn:=xlValues, SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, MatchCase:=False).Row

    ws.Range("B" & FirstRow & ":B" & LastRow).Name = "TabEntries"
    MsgBox Range("TabEntries").Address

    With ws.Range("TabEntries")
        Set LastCell = .Cells(.Cells.Count)
    End With

    Set FoundTab = ws.Range("TabEntries").Find(What:="*", After:=LastCell, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

    If Not FoundTab Is Nothing Then
        FirstAddr = FoundTab.Address
    End If

    Do Until FoundTab Is Nothing
            'do some staff with found values

        Set FoundTab = ws.Range("TabEntries").FindNext(After:=FoundTab)

        If FoundTab.Address = FirstAddr Then
            Exit Do
        End If
    Loop
Next ws

End Sub
因为它每隔一页保留第一页的“页眉”单元格的查找地址

那是因为你告诉它

For Each ws In wb1.Worksheets
    Set ws = ActiveSheet
您不需要设置ws=ActiveSheet

当您为每个ws说
时,
ws
将自动初始化。所以只需删除第二行

因为它每隔一页保留第一页的“页眉”单元格的查找地址

那是因为你告诉它

For Each ws In wb1.Worksheets
    Set ws = ActiveSheet
您不需要设置ws=ActiveSheet

当您为每个ws说
时,
ws
将自动初始化。所以只需删除第二行

因为它每隔一页保留第一页的“页眉”单元格的查找地址

那是因为你告诉它

For Each ws In wb1.Worksheets
    Set ws = ActiveSheet
您不需要设置ws=ActiveSheet

当您为每个ws说
时,
ws
将自动初始化。所以只需删除第二行

因为它每隔一页保留第一页的“页眉”单元格的查找地址

那是因为你告诉它

For Each ws In wb1.Worksheets
    Set ws = ActiveSheet
您不需要设置ws=ActiveSheet


当您为每个ws说
时,
ws
将自动初始化。所以只需删除第二行。

现在就可以完美地工作了。谢谢你,悉达思。我试过别的办法,没想到会是这样一件小事。不管怎样,我都会知道未来的情况。现在很好用。谢谢你,悉达思。我试过别的办法,没想到会是这样一件小事。不管怎样,我都会知道未来的情况。现在很好用。谢谢你,悉达思。我试过别的办法,没想到会是这样一件小事。不管怎样,我都会知道未来的情况。现在很好用。谢谢你,悉达思。我试过别的办法,没想到会是这样一件小事。不管怎样,我都会知道将来会怎样。