2017-09-20 1 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을 수행하는 순간 활성 시트가 ​​변경되므로 다음 반복에서는 더 이상 wOut 시트가 아닌 열린 wokbook 시트를 볼 수 있습니다. 당신이 (선행 점 포함) .Cells(lRow, 1)를 작성하는 경우

, Cells는 귀하의 경우 With wOut에서는, with -clause에 사용한 어떤의 속성으로 볼 수 있습니다. 또는 wOut.Cells(lRow, 1)이라고 쓸 수 있습니다 (이것은 단지 맛의 문제 일뿐입니다).

+1

사실이 코드는 폴더의 모든 파일을 반복하지 않습니다. 첫 번째 파일에만 액세스합니다. 폴더의 모든 파일을 하나씩 반복 재생하기를 원합니다. – Striker

+0

일치하는 데이터를 찾기 위해 해당 폴더의 모든 파일을 검색하는 코드가 필요합니다. 나는 그 코드로 작업 할 수 없다. – Striker

+0

fileSytemObject를 사용하여 파일 목록을 반복하려면 https://stackoverflow.com/a/2683516/7599798을 참조하십시오. 또는 VBA'dir' 명령을 사용할 수 있습니다. – FunThomas

관련 문제