Vba 循环在目录之间不工作
我使用vba代码搜索工作簿列中的单元格列表,需要在文件夹中搜索这些单元格,如果任何工作簿中的单元格匹配,则需要将所有相应的数据复制到主工作簿 我使用了两个循环,但如果一个循环在使用另一个循环,则另一个循环无效。例如,如果我循环浏览文件夹中的所有文件,则无法循环使用主工作簿中的列来逐个搜索单元格 代码如下:Vba 循环在目录之间不工作,vba,excel,Vba,Excel,我使用vba代码搜索工作簿列中的单元格列表,需要在文件夹中搜索这些单元格,如果任何工作簿中的单元格匹配,则需要将所有相应的数据复制到主工作簿 我使用了两个循环,但如果一个循环在使用另一个循环,则另一个循环无效。例如,如果我循环浏览文件夹中的所有文件,则无法循环使用主工作簿中的列来逐个搜索单元格 代码如下: Sub SearchFolders() Dim fso As Object Dim fld As Object Dim strSearch As String
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
子搜索文件夹()
作为对象的Dim fso
作为对象的Dim fld
作为字符串的Dim stresearch
将strPath设置为字符串
作为字符串的Dim strFile
Dim wOut作为工作表
将wbk设置为工作簿
将工作作为工作表
暗光范围
Dim irow作为整数
变暗rng As范围
Dim strFirstAddress作为字符串
关于错误转到错误处理程序
Application.ScreenUpdating=False
strPath=“\dfs\Home\Tes”
Set wOut=此工作簿。工作表(“数据”)
用wOut
lRow=2
设置fso=CreateObject(“Scripting.FileSystemObject”)
Set fld=fso.GetFolder(strPath)
strFile=Dir(strPath&“\*.xls*”)
当单元格(lRow,1)为空时执行此操作
strSearch=单元格(lRow,1)
设置wbk=工作簿。打开_
(文件名:=strPath&“\”&strFile_
UpdateLink:=0_
只读:=真_
AddToMRU:=假)
对于wbk工作表中的每项工作
Set rFound=wks.UsedRange.Find(strSearch)
如果没有找到,那就什么都不是了
strFirstAddress=rFound.Address
如果结束
做
如果rFound不算什么,那么
退出Do
其他的
单元格(lRow,2)=rFound.Offset(0,1).Value
单元格(lRow,3)=rFound.Offset(0,2).Value
如果结束
设置rFound=wks.Cells.FindNext(之后:=rFound)
在strFirstAddress
我认为您必须将do while更改为
Do While .Cells(lRow, 1) <> Empty
Do While.Cells(lRow,1)为空
说明:如果使用单元格(lRow,1)
(不带点),则可以访问活动工作表。但是,在您执行工作簿.open
的那一刻,活动工作表将发生变化,因此在下一次迭代中,您不再查看工作表而查看已打开的工作簿的工作表
如果您编写.Cells(lRow,1)
(带前导点),Cells
将被视为在with
-子句中使用的任何内容的属性,在您的情况下,with wOut
。或者,您可以编写wOut.Cells(lRow,1)
(这只是一个口味问题)我认为您必须将do while更改为
Do While .Cells(lRow, 1) <> Empty
Do While.Cells(lRow,1)为空
说明:如果使用单元格(lRow,1)
(不带点),则可以访问活动工作表。但是,在您执行工作簿.open
的那一刻,活动工作表将发生变化,因此在下一次迭代中,您不再查看工作表而查看已打开的工作簿的工作表
如果您编写.Cells(lRow,1)
(带前导点),Cells
将被视为在with
-子句中使用的任何内容的属性,在您的情况下,with wOut
。或者,您可以编写wOut.Cells(lRow,1)
(这只是味道问题)实际上,此代码不会与文件夹中的所有文件循环。它只访问第一个文件。我想让它一个接一个地循环文件夹中的所有文件。我只需要代码来搜索该文件夹中的所有文件以查找匹配的数据!我无法使用这方面的代码。若要使用FileSystemObject循环查看文件列表,请参阅。或者您可以使用VBAdir
命令,因为我是VBA新手,我想知道如何将代码放入代码中以正确处理循环。我将拆分代码:一个子循环文件,并在循环中调用另一个子循环(使用文件名或已打开的工作簿作为参数)处理一个文件的工作。实际上,此代码不会循环处理文件夹中的所有文件。它只访问第一个文件。我想让它一个接一个地循环文件夹中的所有文件。我只需要代码来搜索该文件夹中的所有文件以查找匹配的数据!我无法使用这方面的代码。若要使用FileSystemObject循环查看文件列表,请参阅。或者您可以使用VBAdir
命令,因为我是VBA新手,我想知道如何将代码放入代码中以正确处理循环。我将拆分代码:一个子循环文件,并在循环中调用另一个子循环(使用文件名或已打开的工作簿作为参数),以处理一个文件的工作。