在文件名字符串中查找第一个“ _”

时间:2018-12-19 15:16:33

标签: excel vba

我想遍历目录并按文件名对文件进行分组,直到文件名中的第一个_

文件由

构成
  

经理姓名_员工姓名_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 :(得分:4)

  1. 如果文件扩展名为.xlsx,则将fileName = Dir(sourceFolder & "*.xls")更改为fileName = Dir(sourceFolder & "*.xlsx")
  2. 考虑一下InStr函数,该函数“返回一个变量(长整数),该变量指定一个字符串在另一个字符串中首次出现的位置”。
    • 按原样,destinationFolder = Left(fileName, InStrRev(fileName, ".") - 1)找到最后一个周期左侧的所有内容。
    • 因此,如果您要将目标文件夹设置为Manager Name,则可能是destinationFolder = Left$(fileName, InStr(fileName, "_") - 1)
    • 请注意,这可以使其更健壮,以处理文件名中没有_或以_开头且文件名开头为If InStr(fileName, "_") > 1)的文件名的可能性。