2016-08-22 259 views
-2

使用VBA,是否可以获取包含文件的文件夹的名称?如何从文件路径获取父文件夹的名称?

输入:C:\Windows\System32\notepad.exe

输出:System32

+0

'StrReverse(斯普利特(StrReverse( “C:\ WINDOWS \ SYSTEM32 \ NOTEPAD.EXE”), “\”)(1))' – cyboashu

+1

它是在Docs.SO:只检索从路径文件路径](http://stackoverflow.com/documentation/vba/990/scripting-filesystemobject/11587/retrieve-only-the-path-from-a-file-path#t=201608222101170802615) –

+0

谢谢马特,这很接近但它会返回完整的父路径 – Fidel

回答

0

这将返回父文件夹名称:

Public Function GetParentFolderName(ByVal path As String) As String 
    Dim result As String 
    With fso = CreateObject("Scripting.FileSystemObject") 
     result = .GetParentFolderName(path) 
     GetParentFolderName = Mid(result, InStrRev(result, "\") + 1) 
    End With 
End Function 

用法:

Sub GetParentFolderNameTest() 
    Debug.Print GetParentFolderName("C:\Windows\System32\notepad.exe") 
End Sub 

输出:

System32 
+1

@Fidel ...您可以在Documentation部分编写以提高技能。而不是询问问题并给出答案。谢谢。 – HA560

+1

@ HA560我不认为自己应该有一个主题(或一个问答)......''GetParentFolderName'已经被记录下来了,就像'InStrRev'一样 - 这只是将两者结合起来而已。 –

+0

SO上的绝大多数解决方案都是简单的代码组合。我发布问答的原因是因为我没有在SO或其他地方找到解决这个问题的解决方案。 – Fidel

1

你可以做简单(没有裁判需要):

Function ParentFolder(ByVal path As String) 
     vArray = Split(path, "\") 
     size = UBound(vArray) 
     ParentFolder= vArray(size - 1) 
End Function 

然后调用

ParentFolder("what\ever\path\to\a\file.ext") 

如果你需要一个文件夹类似的父文件夹,通过

替换最后一行
ParentFolder = vArray(size) 

例如,当前应用程序的父文件夹(excel工作簿)

ParentFolder(ActiveWorkbook.path) 
相关问题