我想从存储在特定文件夹中的 excel 文件中复制特定范围并将其粘贴到另一个 excel 文件中。我可以这样做。但是,每次我运行代码时,它都会从文件夹中的第一个文件开始。我想要仅从以前未更新的文件中复制数据。有没有办法做到这一点?
例如:
“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
最佳答案
一种方法是查看 DateLastAccessed
属性(property),或 DateLastModified
属性(property)。这些都是 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
此外,避免使用
Select
和 Activate
因为两者都使用会使您的代码容易出错。 Here is a thread on how to avoid it .在此旁边,我添加了 Option Explicit
这可以确保您避免其他错误,例如拼写错误。
关于excel - 如何仅从保存在预定义文件夹中的新 Excel 文件中复制数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56746682/