Excel 从路径中提取最新的文件名

Excel 从路径中提取最新的文件名,excel,vba,Excel,Vba,我正在寻找一个VBA Excel代码,它从路径返回文件名(我会提到它们) 在excel文件中,其中一列将有文件名(例如:-lgd_00,lgf_01),这些文件将位于我将提到的路径(5或6个路径)中。代码应该搜索路径中的文件名,提取最新的文件名并复制到它旁边 例如,在a1到a20中有文件名。考虑“A1”有“LGDY00”,但在我提到的路径中,TE将是“LGDY00”文件,更新后成为“LGDY01”。此处“lgd_01”是最新的文件,因此,代码应提取“lgd_01”并将其复制到excel中“lgd

我正在寻找一个VBA Excel代码,它从路径返回文件名(我会提到它们)

在excel文件中,其中一列将有文件名(例如:-lgd_00,lgf_01),这些文件将位于我将提到的路径(5或6个路径)中。代码应该搜索路径中的文件名,提取最新的文件名并复制到它旁边

例如,在a1到a20中有文件名。考虑“A1”有“LGDY00”,但在我提到的路径中,TE将是“LGDY00”文件,更新后成为“LGDY01”。此处“lgd_01”是最新的文件,因此,代码应提取“lgd_01”并将其复制到excel中“lgd_00”的(b1)列旁边。如果“lgd_00”是最新的文件,那么它应该复制它

也许附件会有所帮助

谢谢你在这方面的帮助

多谢各位

Sub LatestFileWithName()

Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim strPath As String
Dim strName As String
Dim varDate As Variant
Dim strFind As String

Dim r As Long, ws As Worksheet
Set ws = Sheets("Sheet1")


strPath = ""

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strPath)


For r = ws.Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1

    If ws.Range("A" & r).Value = Left(objectFile, 20) Then

       strFind = ws.Range("A" & r).Value

For Each objFile In objFolder.Files
If InStr(1, objFile.Name, strFind, vbTextCompare) Then
If objFile.DateLastModified > varDate Then
strName = objFile.Name
varDate = objFile.DateLastModified

If Len(strName) = 0 Then
strName = "None found"
Else
strName = strName & " - is latest file - " & varDate
End If

  ws.Range("B" & r).Value = strName
                r = r + 1

End If
End If




  Next 'objFile
     End If
Next r

Set objFSO = Nothing
Set objFolder = Nothing
Set objFile = Nothing
End Sub

我不太明白你想要什么,但我编程了一些应该在附近的东西。请试一试

Sub LatestFileWithName()

    Dim SourceFolder As String
    Dim Ws As Worksheet
    Dim ItemName As String
    Dim Fn As String                            ' File name
    Dim Latest As String
    Dim Sp() As String
    Dim R As Long

    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then                      ' if OK is pressed
            SourceFolder = .SelectedItems(1)
        End If
    End With

    If SourceFolder <> "" Then                  ' a folder was chosen
        Set Ws = Worksheets("Sheet1")
        With Ws
            For R = .Cells(.Rows.Count, "A").End(xlUp).Row To 2 Step -1
                ' read the file name from Sheet1!A:A
                '  this name has no path and no extension (like "lgh_00")
                ItemName = Trim(.Cells(R, "A").Value)
                If Len(ItemName) Then           ' skip if blank
                    Latest = ""
                    ItemName = Split(ItemName, "_")(0)

                    ' search for all items in the folder that have the same name
                    Fn = Dir(SourceFolder & "\" & ItemName & "*")
                    Do While Len(Fn) > 0
                        ' remember the largest one (e.g. 2 is larger than 1)
                        If Fn > Latest Then Latest = Fn
                        Fn = Dir
                    Loop

                    Sp = Split(Latest, ".")     ' remove the extension
                    If UBound(Sp) Then ReDim Preserve Sp(UBound(Sp) - 1)
                    .Cells(R, "B").Value = Join(Sp, ".")
                End If
            Next R
        End With
    End If
End Sub
Sub-LatestFileWithName()
将SourceFolder设置为字符串
将Ws设置为工作表
将ItemName设置为字符串
Dim Fn作为字符串“文件名”
像字符串一样模糊
将Sp()设置为字符串
变暗,变长
使用Application.FileDialog(msoFileDialogFolderPicker)
如果.Show=-1,则“如果按OK”
SourceFolder=.SelectedItems(1)
如果结束
以
如果是SourceFolder“”,则选择了一个文件夹
设置Ws=工作表(“表1”)
与Ws
对于R=.Cells(.Rows.Count,“A”).End(xlUp)。行到2步骤-1
'从Sheet1读取文件名!A:A
'此名称没有路径和扩展名(如“lgh_00”)
ItemName=Trim(.Cells(R,“A”).值)
如果为Len(ItemName),则“如果为空则跳过”
Latest=“”
ItemName=Split(ItemName,“”)(0)
'搜索文件夹中具有相同名称的所有项目
Fn=Dir(SourceFolder&“\”&ItemName&“*”)
当Len(Fn)>0时执行
'记住最大的一个(例如,2大于1)
如果Fn>Latest,则Latest=Fn
Fn=Dir
环
Sp=Split(最新,“.”删除扩展
如果是UBound(Sp),则重拨保留Sp(UBound(Sp)-1)
.Cells(R,“B”).Value=Join(Sp,“.”)
如果结束
下一个R
以
如果结束
端接头

第一张!答:这个宏需要像“lgd_00”这样的文件名。代码中使用了下划线。不应该有扩展,也不应该有路径。当宏启动时,它会将您带到Windows资源管理器的FolderPicker,您可以在其中选择一个文件夹。此后,宏将在A:A中找到每个文件的最新版本,并在B:B中写入名称。

我不太明白您想要什么,但我编程了一些应该很接近的内容。请试一试

Sub LatestFileWithName()

    Dim SourceFolder As String
    Dim Ws As Worksheet
    Dim ItemName As String
    Dim Fn As String                            ' File name
    Dim Latest As String
    Dim Sp() As String
    Dim R As Long

    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then                      ' if OK is pressed
            SourceFolder = .SelectedItems(1)
        End If
    End With

    If SourceFolder <> "" Then                  ' a folder was chosen
        Set Ws = Worksheets("Sheet1")
        With Ws
            For R = .Cells(.Rows.Count, "A").End(xlUp).Row To 2 Step -1
                ' read the file name from Sheet1!A:A
                '  this name has no path and no extension (like "lgh_00")
                ItemName = Trim(.Cells(R, "A").Value)
                If Len(ItemName) Then           ' skip if blank
                    Latest = ""
                    ItemName = Split(ItemName, "_")(0)

                    ' search for all items in the folder that have the same name
                    Fn = Dir(SourceFolder & "\" & ItemName & "*")
                    Do While Len(Fn) > 0
                        ' remember the largest one (e.g. 2 is larger than 1)
                        If Fn > Latest Then Latest = Fn
                        Fn = Dir
                    Loop

                    Sp = Split(Latest, ".")     ' remove the extension
                    If UBound(Sp) Then ReDim Preserve Sp(UBound(Sp) - 1)
                    .Cells(R, "B").Value = Join(Sp, ".")
                End If
            Next R
        End With
    End If
End Sub
Sub-LatestFileWithName()
将SourceFolder设置为字符串
将Ws设置为工作表
将ItemName设置为字符串
Dim Fn作为字符串“文件名”
像字符串一样模糊
将Sp()设置为字符串
变暗,变长
使用Application.FileDialog(msoFileDialogFolderPicker)
如果.Show=-1,则“如果按OK”
SourceFolder=.SelectedItems(1)
如果结束
以
如果是SourceFolder“”,则选择了一个文件夹
设置Ws=工作表(“表1”)
与Ws
对于R=.Cells(.Rows.Count,“A”).End(xlUp)。行到2步骤-1
'从Sheet1读取文件名!A:A
'此名称没有路径和扩展名(如“lgh_00”)
ItemName=Trim(.Cells(R,“A”).值)
如果为Len(ItemName),则“如果为空则跳过”
Latest=“”
ItemName=Split(ItemName,“”)(0)
'搜索文件夹中具有相同名称的所有项目
Fn=Dir(SourceFolder&“\”&ItemName&“*”)
当Len(Fn)>0时执行
'记住最大的一个(例如,2大于1)
如果Fn>Latest,则Latest=Fn
Fn=Dir
环
Sp=Split(最新,“.”删除扩展
如果是UBound(Sp),则重拨保留Sp(UBound(Sp)-1)
.Cells(R,“B”).Value=Join(Sp,“.”)
如果结束
下一个R
以
如果结束
端接头
第一张!答:这个宏需要像“lgd_00”这样的文件名。代码中使用了下划线。不应该有扩展,也不应该有路径。当宏启动时,它会将您带到Windows资源管理器的FolderPicker,您可以在其中选择一个文件夹。此后,宏将在A:A中找到每个文件的最新版本,并在B:B中写入名称