我正在尝试编写一个vba脚本,它将搜索多页工作簿并返回包含dataToFind字符串的所有结果。目前我正在使用find和findNext函数......下面似乎按照我想要的方式浏览所有页面,但它只会一次又一次地返回单个结果。
以下是我的代码。
Function searchGrids(contract As String, pbp As String, county As String) As String()
Dim datatoFind As String
Dim sheetCount As Integer
Dim counter As Integer
Dim currentSheet As Integer
Dim pos As Integer
Dim endFlag As Integer
endFlag = 0
Set indGrid = Workbooks("2014NumberGrid")
On Error Resume Next
currentSheet = ActiveSheet.Index
datatoFind = contract & "-" & pbp
sheetCount = indGrid.Sheets.Count
For counter = 1 To sheetCount
indGrid.Sheets(counter).Activate
If IsError(Cells.find(What:=datatoFind, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate) = False Then Exit For
Next counter
pos = InStr(ActiveCell.Value, datatoFind)
If pos > 0 Then
MsgBox (ActiveCell.EntireRow.Cells(1, 2).Value)
End If
Do While endFlag = 0
If pos = 0 Then
endFlag = 1
Else
For counter = 1 To sheetCount
Do While pos > 0
indGrid.Sheets(counter).Activate
indGrid.FindNext(ActiveCell).Activate
pos = InStr(ActiveCell.Value, datatoFind)
MsgBox (ActiveCell.EntireRow.Cells(1, 2).Value)
Loop
Next counter
End If
Loop
Sheets(currentSheet).Activate
End Function
由于
P.S。有人问这个函数应该返回什么值。目前,没关系。我所要做的就是访问电子表格的数据,以便我可以使用它。然后我将返回函数内部构建的复杂字符串或字符串数组。任何返回的变量都将根据其他工作簿中的数据构建。如果有一个更好的方法(比如,返回所有行的范围都在里面),那么我当然绝对是开放的。
答案 0 :(得分:2)
这是您可以适应的 sub 。子查找所有搜索单词 happy
的工作表对于找到的每个实例,都会记录找到的行的列 A 中的工作表名称,地址和值。然后输出信息:
Sub FindingData()
Dim sh As Worksheet, v As String, r As Range, _
msg As String
v = "happy"
For Each sh In Worksheets
With sh
For Each r In .UsedRange
If InStr(1, r.Value, v) > 0 Then
msg = msg & .Name & vbTab & r.Address & vbTab & CStr(r.EntireRow.Cells(1).Value) & vbCrLf
End If
Next r
End With
Next sh
MsgBox msg
End Sub
注意:我使用循环而不是 .FIND()方法。