Мой скрипт vba здесь извлекает имена файлов из указанной папки в переменной: path
и пытается их отсортировать, выделяя самые последние файлы.
Файлы отформатированы следующим образом: folderpath\filename[issue].extension
с проблемой, которую мы используем, чтобы определить, насколько актуальна эта часть. В настоящее время я хочу, чтобы мой скрипт выполнял разделение имени файла и выдачу на две отдельные переменные, проверяя MyCollection
, существует ли уже имя файла и, если оно существует, является ли оно наиболее актуальной проблемой. Конечная цель сценария - перебрать большую папку этих файлов и оставить только те, которые имеют наибольшую проблему
В настоящее время мой скрипт имеет вложенную For Each i in MyCollection
, работающую внутри Do While Len(Filename) > 0
. Когда я удаляю вложенную часть, она перебирает все файлы в папке, но когда она включена, она перебирает только две. Какова причина этого? Я не могу понять это
Проигнорируйте большинство msgbox, они просто я пытаюсь выяснить, какие коды до
Private Function PullUpdatedFileNames(Path As String) As Collection
Dim MyCollection As New Collection
Dim Filename As String
Dim TotalFiles As Integer
Dim PartName As String
Dim Issue As String
Dim CollectionFileName As String
Dim iValue As Integer
Filename = Dir(Path & "\")
Do While Len(Filename) > 0
If InStr(Filename, "[") > 0 And InStr(Filename, "]") > 0 Then
PartName = Left(Filename, InStr(Filename, "[") - 1) & Right(Filename, InStr(Filename, "]") + 1)
Issue = Mid(Filename, InStr(Filename, "[") + 1, InStr(Filename, "]") - InStr(Filename, "[") - 1)
If MyCollection.Count <> 0 Then
For Each i In MyCollection
MsgBox "Start for each loop" & vbNewLine & "Line being searched:" & vbNewLine & i
CollectionFileName = Right(Dir(i), Len(i) - Len(Path))
If Left(CollectionFileName, InStr(CollectionFileName, "[") - 1) & Right(CollectionFileName, InStr(CollectionFileName, "]") + 1) = PartName Then
If Mid(CollectionFileName, InStr(CollectionFileName, "[") + 1, InStr(CollectionFileName, "]") - InStr(CollectionFileName, "[") - 1) > Issue Then
MsgBox Filename & vbNewLine & "Not Added, Old part newer issue"
Else
MsgBox Filename & vbNewLine & "Added, This part was newer issue"
iValue = IndexOf(MyCollection, i)
MyCollection.Add Path & "\" & Filename
MyCollection.Remove iValue
End If
Else
MsgBox Filename & vbNewLine & "Added New"
MyCollection.Add Path & "\" & Filename
End If
Next i
Else
MsgBox Filename & vbNewLine & "Added New"
MyCollection.Add Path & "\" & Filename
End If
MsgBox Filename & " Added"
TotalFiles = TotalFiles + 1
Else
MsgBox Filename & " Not Added"
End If
Filename = Dir
Loop
MsgBox TotalFiles & " file(s) selected within folder"
Set PullFileNames = MyCollection
End Function