Excel 从路径中提取最新的文件名
我正在寻找一个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”是最新的文件,那么它应该复制它 也许附件会有所帮助 谢谢你在这方面的帮助 多谢各位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
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中写入名称