2017-01-30 3 views
1

Я пытаюсь перечислить все файлы из папки и подпапок (ов) на основе строки из пользовательской формы в новую книгу. Напр. Я хочу ввести строку как 0200-T1; 0201-T12, и я разделяю строку, используя «;» для поиска двух или более файлов, которые начинаются с соответствующих строк. Пожалуйста, посмотрите мой код и предложите исправления. В настоящее время он отображает только первую строку из массива split.VBA-Список различных имен файлов из папок и подпапок на основе разных строк

Sub ListFilesHomolog() 
xdir = Usrfrm_JbOrderFiles.Txtbx_Browse2.Value ' define search path 
Set mywb = Workbooks.Add 
Call ListFilesInFolderHomolog(xdir, True) 
End Sub 

Sub ListFilesInFolderHomolog(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean) 
Dim xFileSystemObject As Object 
Dim xFolder As Object 
Dim xSubFolder As Object 
Dim xFile As Object 
Dim rowIndex As Long 
Application.ScreenUpdating = False 
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject") 
Set xFolder = xFileSystemObject.GetFolder(xFolderName) 
On Error GoTo 0 
rowIndex = Application.ActiveSheet.Range("A1048576").End(xlUp).Row + 1 
    For Each xFile In xFolder.Files 
     On Error Resume Next 
      fname = xFile.Name 
      HomFiles = Split(Usrfrm_JbOrderFiles.txtbx_jbOrdNo2.Value, ";") 
      For scount = LBound(HomFiles) To UBound(HomFiles) 
      srchTrm = HomFiles(scount) 'value from form 
      tst = Split(fname, "-") 

      If InStr(UCase(tst(0) & "-" & tst(1)), UCase(srchTrm)) = 0 Then GoTo a: 'skip if string not found 
      With mywb 
       mywb.Activate 
       Worksheets(1).Columns("A:H").FormatConditions.Add Type:=xlExpression, Formula1:="=E($A1<>"""";MOD(LIN();2))" 
       Worksheets(1).Columns("A:H").FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
        With Worksheets(1).Columns("A:H").FormatConditions(1).Interior 
         .PatternColorIndex = xlAutomatic 
         .ThemeColor = xlThemeColorDark1 
         .TintAndShade = -4.99893185216834E-02 
        End With 
       Worksheets(1).Columns("A:H").FormatConditions(1).StopIfTrue = False 

       Worksheets(1).Cells(1, 1).Value = "File Name" 'file name" 
       Worksheets(1).Cells(1, 8).Value = "Link" 'file name" 
       Worksheets(1).Cells(rowIndex, 1).Formula = xFile.Name 'file name 
       ActiveSheet.Hyperlinks.Add Cells(rowIndex, 8), xFile, TextToDisplay:="Open" 
       Worksheets(1).Cells.EntireColumn.AutoFit 
       ActiveWindow.DisplayGridlines = False 
       ActiveWindow.DisplayHeadings = False 
      End With 
       rowIndex = rowIndex + 1 
      Next scount 
a: 
    Next xFile 
If xIsSubfolders Then 
    For Each xSubFolder In xFolder.SubFolders 
     ListFilesInFolderHomolog xSubFolder.Path, True 
    Next xSubFolder 
End If 
Set xFile = Nothing 
Set xFolder = Nothing 
Set xFileSystemObject = Nothing 
Application.ScreenUpdating = True 
End Sub 

ответ

1

Вы в настоящее время выход из вашего For scount петли если файл смотрел на не соответствует первому критерию.

Используя ваш пример критериев "0200-T1;0201-T12", если имя файла не содержит строку "0200-T1" вы выйти из цикла и не проверить, чтобы увидеть, если имя файла содержит строку "0201-T12".

Вам нужно изменить

 Next scount 
a: 
    Next xFile 

быть

a: 
     Next scount 
    Next xFile 
+0

Спасибо за вашу помощь, я постараюсь это. Еще одно сомнение заключается в том, что, как узнать, когда это последняя итерация цикла (последняя xFile или последняя вложенная папка) в моем коде выше? –

+0

@arkadutta - Зачем вам нужно знать, когда это последняя итерация? Обычно (но, по общему признанию, не всегда) все, что нужно сделать на «последней» итерации, действительно может быть выполнено после завершения последней итерации, то есть вне цикла, поэтому мне просто интересно, какая у вас проблема, которая может быть только разрешено путем выполнения чего-то внутри цикла в последний раз через него. – YowE3K

+0

Может быть, я не мог прояснить ситуацию, мне нужно что-то выполнить после последней итерации, однако каким-то образом я не могу найти конец цикла –

Смежные вопросы