我使用vba代码搜索工作簿列中的单元格列表,并且需要在文件夹中搜索这些单元格,如果在任何工作簿中匹配单元格,则需要将所有相应的数据复制到主要工作手册。
我正在使用2个循环,但是如果一个正在工作另一个循环,例如,如果我循环遍历文件夹中的所有文件,我不能循环使用主工作簿中的列来逐个搜索一个单元格。
以下是代码:
Sub SearchFolders()
Dim fso As Object
Dim fld As Object
Dim strSearch As String
Dim strPath As String
Dim strFile As String
Dim wOut As Worksheet
Dim wbk As Workbook
Dim wks As Worksheet
Dim rFound As Range
Dim irow As Integer
Dim rng As Range
Dim strFirstAddress As String
On Error GoTo ErrHandler
Application.ScreenUpdating = False
strPath = "\dfs\Home\Tes"
Set wOut = ThisWorkbook.Worksheets("Data")
With wOut
lRow = 2
Set fso = CreateObject("Scripting.FileSystemObject")
Set fld = fso.GetFolder(strPath)
strFile = Dir(strPath & "\*.xls*")
Do While Cells(lRow, 1) < Empty
strSearch = Cells(lRow, 1)
Set wbk = Workbooks.Open _
(Filename:=strPath & "\" & strFile, _
UpdateLinks:=0, _
ReadOnly:=True, _
AddToMRU:=False)
For Each wks In wbk.Worksheets
Set rFound = wks.UsedRange.Find(strSearch)
If Not rFound Is Nothing Then
strFirstAddress = rFound.Address
End If
Do
If rFound Is Nothing Then
Exit Do
Else
Cells(lRow, 2) = rFound.Offset(0, 1).Value
Cells(lRow, 3) = rFound.Offset(0, 2).Value
End If
Set rFound = wks.Cells.FindNext(After:=rFound)
Loop While strFirstAddress < rFound.Address
Next
wbk.Close (False)
lRow = lRow + 1
Loop
End With
MsgBox "Done"
End Sub
答案 0 :(得分:0)
我认为你必须改变做到
Do While .Cells(lRow, 1) <> Empty
说明:如果使用Cells(lRow, 1)
(不带点),则可以访问活动工作表。但是,当您执行workbook.open
时,活动工作表将会更改,因此在下一次迭代中,您不再查看工作表wOut
,而是查看已打开的工作簿的工作表。
如果你写.Cells(lRow, 1)
(带有前导点),Cells
被视为with
- 条款中使用的任何属性,在你的情况下With wOut
。或者,你可以写wOut.Cells(lRow, 1)
(这只是一个品味问题)