Vba 在循环到其他工作表之前,如何重置查找功能结果?
我想问一下,你是否能帮我完成下面的代码。在我的工作簿中的每一张工作表上都有相同类型的表,但是在每一张工作表上,该表有不同的位置和值。我需要遍历所有工作表,搜索每个工作表上的表值,然后对这些值执行一些其他操作。我使用Find函数来确定表的标题以及随后的表范围。尽管Find函数不能正常工作,因为它会将“Header”单元格的查找地址从第一张工作表保留到每一张工作表。在循环到另一个工作表之前,有没有办法重置找到的标题地址值?先谢谢你Vba 在循环到其他工作表之前,如何重置查找功能结果?,vba,excel,Vba,Excel,我想问一下,你是否能帮我完成下面的代码。在我的工作簿中的每一张工作表上都有相同类型的表,但是在每一张工作表上,该表有不同的位置和值。我需要遍历所有工作表,搜索每个工作表上的表值,然后对这些值执行一些其他操作。我使用Find函数来确定表的标题以及随后的表范围。尽管Find函数不能正常工作,因为它会将“Header”单元格的查找地址从第一张工作表保留到每一张工作表。在循环到另一个工作表之前,有没有办法重置找到的标题地址值?先谢谢你 Sub FindInDynamicRanges() Dim wb1
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
将自动初始化。所以只需删除第二行。现在就可以完美地工作了。谢谢你,悉达思。我试过别的办法,没想到会是这样一件小事。不管怎样,我都会知道未来的情况。现在很好用。谢谢你,悉达思。我试过别的办法,没想到会是这样一件小事。不管怎样,我都会知道未来的情况。现在很好用。谢谢你,悉达思。我试过别的办法,没想到会是这样一件小事。不管怎样,我都会知道未来的情况。现在很好用。谢谢你,悉达思。我试过别的办法,没想到会是这样一件小事。不管怎样,我都会知道将来会怎样。