excel - 在文件名字符串中查找第一个“_”
问题描述
我想遍历一个目录并按文件名对文件进行分组,直到文件名_
中的第一个。
文件的结构是
经理姓名_员工姓名_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
在它识别出适合该经理姓名的所有内容后,我只想将这些经理的员工文件分组到一个文件夹中,他们的名字一直到第一个_
.
解决方案
- 如果文件扩展名是
.xlsx
,则更fileName = Dir(sourceFolder & "*.xls")
改为fileName = Dir(sourceFolder & "*.xlsx")
. - 考虑这个
InStr
函数,它“返回一个 Variant (Long),指定一个字符串在另一个字符串中第一次出现的位置。”- 照原样
destinationFolder = Left(fileName, InStrRev(fileName, ".") - 1)
查找最后一个周期左侧的所有内容。 - 因此,如果您希望目标文件夹成为
Manager Name
,那么也许destinationFolder = Left$(fileName, InStr(fileName, "_") - 1)
- 请注意,这可以更稳健地处理文件名中 no 的可能性
_
,或者文件名以 开头_
,初始为If InStr(fileName, "_") > 1)
.
- 照原样
推荐阅读
- java - 阻塞或非阻塞 - 在 Java 的 HashMap 中重新散列期间添加元素
- php - Laravel Blade 变量变量
- linux - 如何用空格解释 grep 的这种行为?
- html - 您如何将图像放置在两个 div/容器之上?
- ios - 检索等于 UUID 的领域对象
- python-3.x - Beautiful Soup 提取标签属性,然后 find_all 具有多个属性
- c# - 该对象要么来自本地目录,要么正在迁移
- pyspark - 在 Spark 中每次出现值之前获取 X 行
- java - java mouselistener on Line2d 向量
- mysql - 按两列分组,里面有两个排序元素