2017-07-06 11 views
1

最新の2つのExcelファイルを開きたいのですが、これまでのところフォルダ内の最新ファイルを開いていましたが、 。以下のコードを参照してください。最新の2番目のファイルを開く方法をお勧めしますか?VBA:フォルダ内の最新の2つのExcelファイルを開く方法

Sub findingdiff() 
Dim FileSys, objFile, myFolder, c As Object 
Dim wb1 As Workbook 
Dim wb2 As Workbook 
    FolderName = ("C:\Users\ashokkumar.d\Desktop\Test\do\") 
       Set FileSys = CreateObject("Scripting.FileSystemObject") 
       Set myFolder = FileSys.GetFolder(FolderName) 

     dteFile = DateSerial(1900, 1, 1) 
     For Each objFile In myFolder.Files 
      If InStr(1, objFile.Name, ".xls") > 0 Then 
       If objFile.DateLastModified > dteFile Then 
        dteFile = objFile.DateLastModified 
        strFilename = objFile.Name 
       End If 
      End If 
     Next objFile 
'opening of latest file in the folder 

       Set wb2 = Workbooks.Open(FolderName & Application.PathSeparator & strFilename) 

End Sub 
+1

をあなたは、単に再びループを実行するが、文の場合にのみ行 strFilename =を実行することを持つことができますobjFile.Name objFile.Nameが既にstrFileNameNewestとして保存されていない場合 – AndyW

答えて

1

を行うことができます。ソートされたリストを作成し、最初の2つのファイルを処理:あなたは、最新のファイル(例えばstrFileNameNewest)を識別した後

Sub Lastest2Files() 
    Dim rs As ADODB.Recordset 
    Dim fs As FileSystemObject 
    Dim Folder As Folder 
    Dim File As File 

    'create a recordset to store file info 
    Set rs = New ADODB.Recordset 
    rs.fields.Append "FileName", adVarChar, 100 
    rs.fields.Append "Modified", adDate 
    rs.Open 

    'build the list of files and sort 
    Set fs = New FileSystemObject 
    Set Folder = fs.GetFolder("C:\aatemp") 

    For Each File In Folder.Files 
     rs.AddNew 
     rs("FileName") = File.Path 
     rs("Modified") = File.DateLastModified 
    Next 

    rs.Sort = "Modified DESC" 

    'process the first 2 files 
    rs.MoveFirst 
    Set wb2 = Workbooks.Open(rs.fields("FileName").value) 
    rs.MoveNext 
    Set wb2 = Workbooks.Open(rs.fields("FileName").value) 
End Sub 
1

あなたはここで問題に取り組むための別の方法があります1回のパスで

Sub findingdiff() 
Dim FileSys, objFile, myFolder, c As Object 
Dim wb1 As Workbook 
Dim wb2 As Workbook 
Dim strFilename, strFilename2 
    FolderName = ("C:\Users\ashokkumar.d\Desktop\Test\do\") 
       Set FileSys = CreateObject("Scripting.FileSystemObject") 
       Set myFolder = FileSys.GetFolder(FolderName) 

     dteFile = DateSerial(1900, 1, 1) 
     For Each objFile In myFolder.Files 
      If InStr(1, objFile.Name, ".xls") > 0 Then 
       If objFile.DateLastModified > dteFile Then 
        dteFile = objFile.DateLastModified 
        strFilename2 = strFilename 
        strFilename = objFile.Name 
       End If 
      End If 
     Next objFile 
'opening of latest file in the folder 

    Set wb1 = Workbooks.Open(FolderName & Application.PathSeparator & strFilename)    
Set wb2 = Workbooks.Open(FolderName & Application.PathSeparator & strFilename2) 

End Sub 
+0

@TsionDPあなたはどうか説明できますか? – Ashok

+0

@Ashokは 'strFileName2'に直近のファイルを' strFileName2'に保存してから 'strFileName'を最新のファイルに更新し、' strFileName2'の2番目に最近のファイルで終わります。 –

関連する問題