如何仅从预定义文件夹中保存的新Excel文件中复制数据?

时间:2019-06-25 04:03:39

标签: excel vba

我想从存储在特定文件夹中的excel文件中复制特定范围并将其粘贴到另一个excel文件中。我能够这样做。但是,每次我运行代码时,它都从该文件夹中的第一个文件开始我只想复制以前未更新过的文件中的数据,有办法吗? EG:

“ file1.xlsx”和“ file2.xlsx”在文件夹中。我想从给定文件中复制数据并将其粘贴到“ NewFile.xlsm”中(我能够实现),但是,如果我在文件夹中添加“ file3.xlsx”和“ file4.xlsx”,然后运行宏,它也从“ file1.xlsx”和“ file2.xlsx”复制数据。我希望它这次仅从“ file3.xlsx”和“ file4.xlsx”复制数据,因为之前两个文件中的数据已经存在已保存。 (我的代码在下面给出)

Path = "C:\Users\National\Desktop\TEST Codes\PO\Excel\"
Filename = Dir(Path & "*.xls")
Do While Filename <> ""

If Filename = "Z master for PO.xlsm" Then
Exit Sub
End If
Workbooks.Open Filename:=Path & Filename, ReadOnly:=True

Sheets("DETAILED").Range("A3:S15").Copy

Application.DisplayAlerts = False
Application.ScreenUpdating = False

ActiveWorkbook.Close



Dim LASTROW As Long, WS As Worksheet, LS As Long
Set WS = Sheets("sheet1")
LASTROW = WS.Range("R" & Rows.Count).End(xlUp).Row + 1

WS.Range("A" & LASTROW).Select

ActiveSheet.Paste Destination:=WS.Range("A" & LASTROW)

Application.CutCopyMode = False

Filename = Dir()
Loop

Range("A7").Select

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是查看DateLastAccessed属性或DateLastModified属性。这些都是File对象的属性,请参见this MS documentation

您可以设置一个最小日期/时间,该日期/时间应排除您不想处理的文件。

请务必set the correct reference

Option Explicit

Sub GoThroughFiles()

Dim Path As String, Filename As String,
Dim fso, fileinfo

Set fso = CreateObject("Scripting.FileSystemObject")
Path = "C:\Users\National\Desktop\TEST Codes\PO\Excel\"
Filename = Dir(Path & "*.xls")

Set fileinfo = fso.GetFile(Path & Filename)

Do While Len(Filename) > 0 
    If fileinfo.DateLastAccessed > DateAdd("n", -5, Now) 'If the file was last accessed less than 5 minutes ago
        'Do stuff with the file
    End If
    FileName = Dir()
Loop

End Sub

此外,避免同时使用SelectActivate,因为同时使用它们会使代码易于出错。 Here is a thread on how to avoid it。紧接着,我添加了Option Explicit,以确保您避免其他由于拼写错误引起的错误。