2017-09-20 40 views
1

我使用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

我认为你必须在做改变,而到

Do While .Cells(lRow, 1) <> Empty 

解释:如果您使用Cells(lRow, 1)(不点),您可以访问活动工作表。但在你做workbook.open的那一刻,活动工作表会改变,所以在下一次迭代中,你不再看表单,而是查看打开的工具箱表。

如果你写.Cells(lRow, 1)(带前导点),Cells被看作是无论你已经在with -clause使用,你的情况With wOut的属性。或者,你可以写wOut.Cells(lRow, 1)(这只是一个有趣的问题)

+1

实际上,这段代码不会循环所有文件的文件夹。它只访问第一个文件。我希望它能够一个接一个地循环文件夹中的所有文件。 – Striker

+0

我只是需要代码来搜索该文件夹中的所有文件的匹配数据!我无法与代码一起工作。 – Striker

+0

要使用fileSytemObject遍历文件列表,请参阅https://stackoverflow.com/a/2683516/7599798。或者你可以使用VBA'dir'命令 – FunThomas