如何在excel vba宏中拆分字符串忽略最后一部分

时间:2015-04-27 06:46:05

标签: excel vba excel-vba

我有一个包含路径值的单元格,如:

C:/Videos/New/VideoName.mp4

我只想从该单元格中获取路径

所以我试过

elementArray = Split(Cells(4, 2), "/")

这样我每次都可以连接该数组中的字符串

但阵列仍然具有完整路径

elementArray[0]=C:/Videos/New/VideoName.mp4

如何忽略文件名并单独使用路径?

4 个答案:

答案 0 :(得分:3)

您是否正在使用和/或要求正斜杠(例如/Chr(47))或反斜杠(例如\或{{1})似乎存在一些混淆})。尝试这样的事情:

Chr(92)

查看VBE的立即窗口( Ctrl + G )获取结果。

答案 1 :(得分:2)

为了避免任何问题,我会使用GetParentFolderName()的{​​{1}}方法,可以通过添加引用FileSystemObject来访问。

Microsoft Scripting Runtime

或者在@SOofWXLS建议的后期绑定中(这样可以避免将库早期绑定到项目中):

Dim fso As New FileSystemObject
parentFolder = fso.GetParentFolderName("your path")

我认为这是通过完整路径解析父文件夹的最简单,最强大的方法:避免复杂的字符串操作,这可能会让一些“不太常见”的情况分开(例如Mac的路径不会被“解析”手动“方法”。

答案 2 :(得分:2)

您可以使用InStrRev()功能:

With Cells(4, 2)
    MsgBox Mid(.Value, 1, InStrRev(.Value, "\") - 1)
End With

答案 3 :(得分:1)

请阅读Jeeped对该问题的评论。

我建议使用StrReverseInStr函数代替Split

Dim s As String, f As String

s = "C:\Videos\New\VideoName.mp4"
f = StrReverse(s)
'FileName
'f = Left(f, InStr(1, f, "\") - 1)
'Path
f = Right(f, InStr(1, f, "\"))
f = StrReverse(f)
MsgBox f

'returns: VideoName.mp4 or path - read above comments