Я пытаюсь перечислить все файлы из папки и подпапок (ов) на основе строки из пользовательской формы в новую книгу. Напр. Я хочу ввести строку как 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
Спасибо за вашу помощь, я постараюсь это. Еще одно сомнение заключается в том, что, как узнать, когда это последняя итерация цикла (последняя xFile или последняя вложенная папка) в моем коде выше? –
@arkadutta - Зачем вам нужно знать, когда это последняя итерация? Обычно (но, по общему признанию, не всегда) все, что нужно сделать на «последней» итерации, действительно может быть выполнено после завершения последней итерации, то есть вне цикла, поэтому мне просто интересно, какая у вас проблема, которая может быть только разрешено путем выполнения чего-то внутри цикла в последний раз через него. – YowE3K
Может быть, я не мог прояснить ситуацию, мне нужно что-то выполнить после последней итерации, однако каким-то образом я не могу найти конец цикла –