Ищите первый «_» в строке имени файла - PullRequest
0 голосов
/ 19 декабря 2018

Я хочу просмотреть каталог и сгруппировать файлы по именам файлов до первого _ в имени файла.

Файлы структурированы по

Имя менеджера_Employee Name_Assessment.xlsx

Я хочу, чтобы это сгруппировало строки до первого подчеркивания.Я не могу определить длину символа, потому что у менеджеров разные имена.

Я думаю, что изменение оператора If Right(filename,4) должно делать то, что я хочу, но я не могу указать ограничение на число символов.

Public Sub Move_Files()

Dim sourceFolder As String, fileName As String
Dim destinationFolder As String, foundDestinationFolder As String
Dim missingFolders As String

sourceFolder = "C:\Assessment\"
If Right(sourceFolder, 1) <> "\" Then sourceFolder = sourceFolder & "\"

'Loop through *.xls files in source folder

missingFolders = ""
fileName = Dir(sourceFolder & "*.xls")
While fileName <> vbNullString
    **If Right(fileName, 4) = ".xlsx" Then**
        destinationFolder = Left(fileName, InStrRev(fileName, ".") - 1)
        foundDestinationFolder = Find_Subfolder(sourceFolder, destinationFolder)
        If foundDestinationFolder <> "" Then
            Name sourceFolder & fileName As foundDestinationFolder & fileName
        Else
            missingFolders = missingFolders & vbCrLf & destinationFolder
        End If
    End If
    fileName = Dir
Wend

If missingFolders = "" Then
    MsgBox "All subfolders exist.  All files moved to their respective destination folder"
Else
    MsgBox "The following subfolders don't exist:" & vbCrLf & _
            missingFolders
End If

End Sub

После того, как он определит все, что подходит под именем этого менеджера, я хочу сгруппировать только файлы сотрудников этого менеджера в папку с их именем вплоть до первого _.

1 Ответ

0 голосов
/ 19 декабря 2018
  1. Если расширение файла .xlsx, измените fileName = Dir(sourceFolder & "*.xls") на fileName = Dir(sourceFolder & "*.xlsx").
  2. Рассмотрим функцию InStr, которая «возвращает вариант (Long), указывающий позицию первого вхождения одной строки в другой».
    • Как есть, destinationFolder = Left(fileName, InStrRev(fileName, ".") - 1) находит все слева от последнего периода.
    • Таким образом, если вы хотите, чтобы папка назначения была Manager Name, то, возможно, destinationFolder = Left$(fileName, InStr(fileName, "_") - 1)
    • Обратите внимание, что это можно сделать более надежным, чтобы справиться с возможностью отсутствия _ вимя файла или имя файла, начинающееся с _, с начальным If InStr(fileName, "_") > 1).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...