VBA在文件夹中生成最近修改的.XLS文件
我可以使用什么VBA代码使用单元格中显示的文件夹路径来检索该文件夹中最近修改的.xls文件?到目前为止,我有文件名显示但不是正确的文件:VBA在文件夹中生成最近修改的.XLS文件,vba,excel,last-modified,Vba,Excel,Last Modified,我可以使用什么VBA代码使用单元格中显示的文件夹路径来检索该文件夹中最近修改的.xls文件?到目前为止,我有文件名显示但不是正确的文件: Function GetFileNames(ByVal FolderPath As String) As Variant Dim Result As Variant Dim i As Integer Dim MyFile As Object Dim MyFSO As Object Dim MyFolder As Object Dim MyFiles As Ob
Function GetFileNames(ByVal FolderPath As String) As Variant
Dim Result As Variant
Dim i As Integer
Dim MyFile As Object
Dim MyFSO As Object
Dim MyFolder As Object
Dim MyFiles As Object
Set MyFSO = CreateObject("Scripting.FileSystemObject")
Set MyFolder = MyFSO.GetFolder(FolderPath)
Set MyFiles = MyFolder.Files
ReDim Result(1 To MyFiles.Count)
i = 1
For Each MyFile In MyFiles
Result(i) = MyFile.Name
i = i + 1
Next MyFile
GetFileNames = Result
End Function
您只需检查文件夹中每个文件的
datelastmedited
时间戳。快速检查它是否是最新的将“排序”到顶部
Option Explicit
Sub test()
Debug.Print "most recently modified file is " & GetNewestModifiedFilename("C:\Temp")
End Sub
Function GetNewestModifiedFilename(ByVal folderPath As String, _
Optional fileType As String = "xls*") As String
Dim MyFSO As Object
Dim MyFolder As Object
Dim MyFiles As Object
Set MyFSO = CreateObject("Scripting.FileSystemObject")
Set MyFolder = MyFSO.GetFolder(folderPath)
Set MyFiles = MyFolder.Files
Dim mostRecentFilename As String
Dim mostRecentTimestamp As Date
Dim MyFile As Object
For Each MyFile In MyFiles
Debug.Print MyFile.Name & ", modified " & MyFile.DateLastModified
If Mid(MyFile.Name, InStrRev(MyFile.Name, ".") + 1) Like fileType Then
If MyFile.DateLastModified > mostRecentTimestamp Then
mostRecentFilename = MyFile.Name
mostRecentTimestamp = MyFile.DateLastModified
End If
End If
Next MyFile
GetNewestModifiedFilename = mostRecentFilename
End Function
我认为你正在寻找的是一个类似于所选答案的东西 您可以调整代码以满足在函数中传递参数的特定需要,如下面的函数。请注意,参数目录的末尾必须包含反斜杠(例如“C:\Users\”)
函数NewestFile(目录为字符串)为字符串
'用途:从指定目录获取最新的文件名
将文件名设置为字符串
Dim MostRecentFile作为字符串
Dim MostRecentDate作为日期
Dim FileSpec作为字符串
'指定文件类型(如果有)
FileSpec=“*.xls”
FileName=Dir(目录和文件规范)
如果文件名为“”,则
MostRecentFile=FileName
MostRecentDate=FileDateTime(目录和文件名)
文件名“”时执行此操作
如果FileDateTime(目录和文件名)>MostRecentDate,则
MostRecentFile=FileName
MostRecentDate=FileDateTime(目录和文件名)
如果结束
FileName=Dir
环
如果结束
NewestFile=MostRecentFile
端函数
编辑:为获得更大的灵活性,您还可以添加选项(如PeterT的修订答案中所示)以使用可选的FileSpec参数搜索另一种类型的文件,如下面的可选函数中所示。对于这个函数,如果您没有为FileSpec提供任何值,它将查看所有文件
Function NewestFile(ByVal Directory As String, Optional ByVal FileSpec As String = "*.*") As String
'PURPOSE: Get the newest .xls file name from
Dim FileName As String
Dim MostRecentFile As String
Dim MostRecentDate As Date
'Specify the file type, if any
FileName = Dir(Directory & FileSpec)
If FileName <> "" Then
MostRecentFile = FileName
MostRecentDate = FileDateTime(Directory & FileName)
Do While FileName <> ""
If FileDateTime(Directory & FileName) > MostRecentDate Then
MostRecentFile = FileName
MostRecentDate = FileDateTime(Directory & FileName)
End If
FileName = Dir
Loop
End If
NewestFile = MostRecentFile
End Function
函数NewestFile(ByVal目录作为字符串,可选ByVal FileSpec作为字符串=“**”)作为字符串
'目的:从中获取最新的.xls文件名
将文件名设置为字符串
Dim MostRecentFile作为字符串
Dim MostRecentDate作为日期
'指定文件类型(如果有)
FileName=Dir(目录和文件规范)
如果文件名为“”,则
MostRecentFile=FileName
MostRecentDate=FileDateTime(目录和文件名)
文件名“”时执行此操作
如果FileDateTime(目录和文件名)>MostRecentDate,则
MostRecentFile=FileName
MostRecentDate=FileDateTime(目录和文件名)
如果结束
FileName=Dir
环
如果结束
NewestFile=MostRecentFile
端函数
速度问题:Dir函数与FileSystemObject
就速度而言,如果要查看的文件夹包含少量文件,则这两种方法将在大致相同的时间内为您提供相同的结果。但是,如果该文件夹中有很多文件,使用Dir函数方法而不是FileSystemObject应该可以大大加快宏的执行速度。我还没有测试过它,但这似乎是从中的答案得出的结论。您的代码正确地用给定文件夹中的文件名填充
结果
数组。那些不是正确的文件怎么办?@PeterT它目前对文件类型没有限制,也不返回最近修改的文件名伟大的答案!但是,问题提到该函数应该只查看*xls文件。添加了一个简单的可选参数来限制文件类型搜索。它已返回最近修改的文件名。
Function NewestFile(ByVal Directory As String, Optional ByVal FileSpec As String = "*.*") As String
'PURPOSE: Get the newest .xls file name from
Dim FileName As String
Dim MostRecentFile As String
Dim MostRecentDate As Date
'Specify the file type, if any
FileName = Dir(Directory & FileSpec)
If FileName <> "" Then
MostRecentFile = FileName
MostRecentDate = FileDateTime(Directory & FileName)
Do While FileName <> ""
If FileDateTime(Directory & FileName) > MostRecentDate Then
MostRecentFile = FileName
MostRecentDate = FileDateTime(Directory & FileName)
End If
FileName = Dir
Loop
End If
NewestFile = MostRecentFile
End Function