我想遍历目录并按文件名对文件进行分组,直到文件名中的第一个_
。
文件由
构成经理姓名_员工姓名_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
在确定了所有适合该经理姓名的内容之后,我只想将那些经理的员工文件分组到一个文件夹中,其名称直到第一个_
为止。
答案 0 :(得分:4)
.xlsx
,则将fileName = Dir(sourceFolder & "*.xls")
更改为fileName = Dir(sourceFolder & "*.xlsx")
。 InStr
函数,该函数“返回一个变量(长整数),该变量指定一个字符串在另一个字符串中首次出现的位置”。
destinationFolder = Left(fileName, InStrRev(fileName, ".") - 1)
找到最后一个周期左侧的所有内容。 Manager Name
,则可能是destinationFolder = Left$(fileName, InStr(fileName, "_") - 1)
_
或以_
开头且文件名开头为If InStr(fileName, "_") > 1)
的文件名的可能性。