Excel 从文件路径中提取文件夹名称

Excel 从文件路径中提取文件夹名称,excel,vba,Excel,Vba,我有以下格式的文件路径(工作表的连接路径): C:\ExcelFiles\Data\20140522\File1\u 20140522.csv 我想提取20140522 我尝试使用的响应,但它们在我的情况下似乎不起作用。请在下面查找 Filename = "C:\ExcelFiles\Data\20140522\File1_20140522.csv" a = Replace(Mid(Filename, InStrRev(Filename, "_") + 1, Len(Filename)), ".

我有以下格式的文件路径(工作表的连接路径):

C:\ExcelFiles\Data\20140522\File1\u 20140522.csv

我想提取20140522

我尝试使用的响应,但它们在我的情况下似乎不起作用。

请在下面查找

Filename = "C:\ExcelFiles\Data\20140522\File1_20140522.csv"
a = Replace(Mid(Filename, InStrRev(Filename, "_") + 1, Len(Filename)), ".csv", "")

下面的答案从一个范围而不是固定的字符串获取文件路径。如果你打算从你的工作表中获取文件名,那就方便多了,我想你是这样的

Sub GetFileDate()

Dim filename As String

filename = Sheets("Sheet1").Range("C9").Value 'Or Wherever your file path is

MsgBox Replace(Right(filename, 12), ".csv", "")


End Sub

这假设提取的数字总是YYYYMMDD格式的日期,并且文件类型总是.csv

请尝试以下操作。文件夹被选中

Sub Folder_S()
Dim sFolder As FileDialog
On Error Resume Next
Set sFolder = Application.FileDialog(msoFileDialogFolderPicker)
If sFolder.Show = -1 Then
    Folder_Select sFolder.SelectedItems(1), True
End If
End Sub
Sub Folder_Select(ByVal SourceFolderName As String, ByVal IncludeSubfolders As Boolean)
Dim FSO As Object
Dim SourceFolder As Object
Dim FileItem As Object
Dim strFile As String
Dim FileName As Variant
Dim pathParts() As String
Dim pathPart As String
Dim i As Long
Set FSO = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = FSO.GetFolder(SourceFolderName)
pathParts = Split(SourceFolder.Path, Application.PathSeparator)
pathPart = SourceFolder.Path
For i = 0 To UBound(pathParts)
    If pathParts(i) = "20140522" Then
        pathPart = pathParts(i - 0)
        Exit For
    End If
Next i
Row = ActiveCell.Row
With CreateObject("Scripting.Dictionary")
    For Each FileItem In SourceFolder.Files
        strFile = FileItem.Name
        .Item(strFile) = Array(FileItem.Name)
    Next FileItem
    If .Count > 0 Then
        For Each FileName In .Items
            Cells(Row, 2).Formula = pathPart
        Next FileName
    End If
End With

End Sub

我通过搜索一个解决方案找到了您的问题:如何从此文件夹路径中的文件获取文件夹路径。但你的问题与我的要求不完全相符。对于那些通过您的问题标题将发现其与我发现的目的相同的人,以下是我的功能:

Function getFolderPathFromFilePath(filePath As String) As String

    Dim lastPathSeparatorPosition As Long

    lastPathSeparatorPosition = InStrRev(filePath, Application.PathSeparator)

    getFolderPathFromFilePath = Left(filePath, lastPathSeparatorPosition - 1)

End Function

在一些用于此目的的解决方案中,我使用了FSO,但它需要资源,并且我认为如果您仅为这个简单的函数需要它,那么创建FSO对象是不值得的

接受的答案不准确,无法读取文件夹名称。下面是更动态的代码。 使用拆分器,它根据delimeter拆分字符串并生成数组。现在读取数组中最后的第二个元素,即文件夹名称

Dim fileName As String

fileName = "C:\ExcelFiles\Data\20140522\File1_20140522.csv"

Dim vPathSplitter As Variant
vPathSplitter = Split(fileName, "\")
MsgBox (vPathSplitter(UBound(vPathSplitter) - 1))

您希望提取哪个20140522?文件夹名还是文件名?@LiamBee:对不起,我指的是文件夹20140522。谢谢如果你能想清楚你想要的是什么,并更详细地定义它,你可能会得到一个更好的答案(在这个过程中,你很可能会自己解决这个问题)。是否要提取前8位数字?路径中第三个文件夹的名称(即第三个和第四个反斜杠之间的所有内容)?路径中最后一个文件夹的名称?@AshokVardhan这些数字是否总是在“数据”文件夹中?谢谢您的帮助。我使用的代码与上面的代码类似,只是我从文件路径中提取了数字,并使用Left(num,8)函数提取了前8位数字,这是必需的数字。@AshokVardhan没问题!记住,在应该赊账的地方赊账:)