VBA-获取没有内置函数的第二个最后修改的文件(FSO)
我正在尝试使用Excel VBA获取文件夹中上次修改文件之前的文件,我已成功获取上次修改的文件,但无法获取第二个文件。 下面是我用来获取上次修改的文件的代码,没有使用系统函数或内置函数VBA-获取没有内置函数的第二个最后修改的文件(FSO),vba,excel,Vba,Excel,我正在尝试使用Excel VBA获取文件夹中上次修改文件之前的文件,我已成功获取上次修改的文件,但无法获取第二个文件。 下面是我用来获取上次修改的文件的代码,没有使用系统函数或内置函数 Sub LastFileModified() Dim fso As New Scripting.FileSystemObject Dim fill As Scripting.File Dim i As Integer Dim ForStep As Integer D
Sub LastFileModified()
Dim fso As New Scripting.FileSystemObject
Dim fill As Scripting.File
Dim i As Integer
Dim ForStep As Integer
Dim Arr() As Variant
ReDim Arr(fso.GetFolder("C:\Users\Shahim\Desktop\xxxx").Files.Count - 1, 1) As Variant
i = 0
For Each fill In fso.GetFolder("C:\Users\Shahim\Desktop\xxxx").Files
Arr(i, 0) = fill.Name
Arr(i, 1) = CDbl(fill.DateLastModified)
i = i + 1
Next fill
Dim filename As String
Dim Initializer As Double
Initializer = Arr(0, 1)
For ForStep = LBound(Arr) To UBound(Arr)
If Arr(ForStep, 1) > Initializer Then
Initializer = Arr(ForStep, 1)
filename = Arr(ForStep, 0)
End If
Next ForStep
Debug.Print filename
Erase Arr
End Sub
最初的答案对我不起作用,原因有二
Function SecodLastModified(Directory)
Dim FileSys As FileSystemObject
Dim objFile As File, objFile1 As File
Dim myFolder
Dim strFilename As String, strFolder As String, myDir As String
Dim strFilenameFirst As String, strFilenameSecond As String, strFilenameSecond1 As String
Dim dteFile As Date, dteFileSecond1 As Date, dteFileFirst As Date, dteFileSecond As Date
Dim openLastFile
'set up filesys objects
Set FileSys = New FileSystemObject
Set myFolder = FileSys.GetFolder(Directory)
dteFileSecond1 = DateSerial(1900, 1, 1)
dteFile = DateSerial(1900, 1, 1)
'loop through each file and get date last modified. If largest date then store Filename
For Each objFile In myFolder.Files
For Each objFile1 In myFolder.Files
' To prevent opening temporary files
If objFile1.Name Like "*.xlsx" And Left(objFile1.Name, 2) <> "~$" Then
If objFile1.DateLastModified > objFile.DateLastModified Then
dteFileSecond = objFile.DateLastModified
strFilenameSecond = objFile.Name
dteFileFirst = objFile1.DateLastModified
strFilenameFirst = objFile1.Name
' If second file date is greater than current second file, store away as the second file
If dteFileSecond > dteFileSecond1 Then
dteFileSecond1 = objFile.DateLastModified
strFilenameSecond1 = objFile.Name
End If
End If
End If
Next
Next objFile
Set SecodLastModified = Workbooks.Open(Directory & "\" & strFilenameSecond1)
Set FileSys = Nothing
Set myFolder = Nothing
End Function
函数secodlastmedited(目录)
将文件系统设置为FileSystemObject
Dim objFile作为文件,objFile1作为文件
调暗我的文件夹
Dim strFilename作为字符串,strFolder作为字符串,myDir作为字符串
Dim strFilenameFirst作为字符串,strFilenameSecond作为字符串,strFilenameSecond1作为字符串
Dim dteFile As Date,dteFileSecond1 As Date,dteFileFirst As Date,DTEFILESCOND As Date
Dim openLastFile
'设置文件系统对象
Set FileSys=New FileSystemObject
设置myFolder=FileSys.GetFolder(目录)
dteFileSecond1=DateSerial(1900,1,1)
dteFile=DateSerial(1900,1,1)
'循环遍历每个文件并获取上次修改的日期。如果是最大日期,则存储文件名
对于myFolder.Files中的每个objFile
对于myFolder.Files中的每个objFile1
'以防止打开临时文件
如果objFile1.Name像“*.xlsx”并向左(objFile1.Name,2)“~$”那么
如果objFile1.DateLastModified>objFile.DateLastModified,则
dteFileSecond=objFile.DateLastModified
strfilenamessecond=objFile.Name
dteFileFirst=objFile1.DateLastModified
strFilenameFirst=objFile1.Name
'如果第二个文件日期大于当前第二个文件,则存储为第二个文件
如果dteFileSecond>dteFileSecond1,则
dteFileSecond1=objFile.DateLastModified
strFilenameSecond1=objFile.Name
如果结束
如果结束
如果结束
下一个
下一个objFile
Set secodlastmedited=Workbooks.Open(目录&“\”&strFilenameSecond1)
Set FileSys=Nothing
设置myFolder=Nothing
端函数
最初的答案对我不起作用,原因有二
Function SecodLastModified(Directory)
Dim FileSys As FileSystemObject
Dim objFile As File, objFile1 As File
Dim myFolder
Dim strFilename As String, strFolder As String, myDir As String
Dim strFilenameFirst As String, strFilenameSecond As String, strFilenameSecond1 As String
Dim dteFile As Date, dteFileSecond1 As Date, dteFileFirst As Date, dteFileSecond As Date
Dim openLastFile
'set up filesys objects
Set FileSys = New FileSystemObject
Set myFolder = FileSys.GetFolder(Directory)
dteFileSecond1 = DateSerial(1900, 1, 1)
dteFile = DateSerial(1900, 1, 1)
'loop through each file and get date last modified. If largest date then store Filename
For Each objFile In myFolder.Files
For Each objFile1 In myFolder.Files
' To prevent opening temporary files
If objFile1.Name Like "*.xlsx" And Left(objFile1.Name, 2) <> "~$" Then
If objFile1.DateLastModified > objFile.DateLastModified Then
dteFileSecond = objFile.DateLastModified
strFilenameSecond = objFile.Name
dteFileFirst = objFile1.DateLastModified
strFilenameFirst = objFile1.Name
' If second file date is greater than current second file, store away as the second file
If dteFileSecond > dteFileSecond1 Then
dteFileSecond1 = objFile.DateLastModified
strFilenameSecond1 = objFile.Name
End If
End If
End If
Next
Next objFile
Set SecodLastModified = Workbooks.Open(Directory & "\" & strFilenameSecond1)
Set FileSys = Nothing
Set myFolder = Nothing
End Function
函数secodlastmedited(目录)
将文件系统设置为FileSystemObject
Dim objFile作为文件,objFile1作为文件
调暗我的文件夹
Dim strFilename作为字符串,strFolder作为字符串,myDir作为字符串
Dim strFilenameFirst作为字符串,strFilenameSecond作为字符串,strFilenameSecond1作为字符串
Dim dteFile As Date,dteFileSecond1 As Date,dteFileFirst As Date,DTEFILESCOND As Date
Dim openLastFile
'设置文件系统对象
Set FileSys=New FileSystemObject
设置myFolder=FileSys.GetFolder(目录)
dteFileSecond1=DateSerial(1900,1,1)
dteFile=DateSerial(1900,1,1)
'循环遍历每个文件并获取上次修改的日期。如果是最大日期,则存储文件名
对于myFolder.Files中的每个objFile
对于myFolder.Files中的每个objFile1
'以防止打开临时文件
如果objFile1.Name像“*.xlsx”并向左(objFile1.Name,2)“~$”那么
如果objFile1.DateLastModified>objFile.DateLastModified,则
dteFileSecond=objFile.DateLastModified
strfilenamessecond=objFile.Name
dteFileFirst=objFile1.DateLastModified
strFilenameFirst=objFile1.Name
'如果第二个文件日期大于当前第二个文件,则存储为第二个文件
如果dteFileSecond>dteFileSecond1,则
dteFileSecond1=objFile.DateLastModified
strFilenameSecond1=objFile.Name
如果结束
如果结束
如果结束
下一个
下一个objFile
Set secodlastmedited=Workbooks.Open(目录&“\”&strFilenameSecond1)
Set FileSys=Nothing
设置myFolder=Nothing
端函数
这很好,但这里的要点是我不想使用Sort或Max等方法,请看,当我得到最后修改的文件时,我可以使用Max函数。谢谢谢谢,这很好,但这里的重点是我不想使用像Sort或Max这样的方法,当我得到最后修改的文件时,我可以使用Max函数。谢谢你,这真是太好了