我想从存储在特定文件夹中的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
答案 0 :(得分:0)
执行此操作的一种方法是查看DateLastAccessed
属性或DateLastModified
属性。这些都是File
对象的属性,请参见this MS documentation。
您可以设置一个最小日期/时间,该日期/时间应排除您不想处理的文件。
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
此外,避免同时使用Select
和Activate
,因为同时使用它们会使代码易于出错。 Here is a thread on how to avoid it。紧接着,我添加了Option Explicit
,以确保您避免其他由于拼写错误引起的错误。