Как скопировать данные только из новых файлов Excel, которые сохранены в предопределенной папке? - PullRequest
2 голосов
/ 25 июня 2019

Я хочу скопировать определенный диапазон из файлов Excel, хранящихся в определенной папке, и вставить его в другой файл Excel. Я могу это сделать. Однако каждый раз, когда я запускаю код, он начинается с самого первого файла в папке. .Я хочу скопировать данные только из тех файлов, которые не были обновлены ранее. Есть ли способ сделать это? EG:

"file1.xlsx" и "file2.xlsx" находятся в папке. Я хочу скопировать данные из указанных файлов и вставить их в «NewFile.xlsm» (я могу этого добиться). Однако, если я добавлю «file3.xlsx» и «file4.xlsx» в папку, а затем запустите макрос, он также копирует данные из "file1.xlsx" и "file2.xlsx". Я хочу, чтобы он копировал данные только из "file3.xlsx" и "file4.xlsx" на этот раз, так как данные из предыдущих 2 файлов уже сохранены. (Код, который я имею, дан ниже)

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 голосов
/ 25 июня 2019

Один из способов сделать это - посмотреть на свойство DateLastAccessed или DateLastModified.Оба эти свойства объекта File, см. эту документацию MS .

Вы можете установить минимальную дату / время, которая должна исключать файлы, которые вы не хотите обрабатывать.

Обязательно установите правильное задание

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, так как использование обоих сделает ваш код подверженным ошибкам. Вот ветка о том, как этого избежать .Кроме того, я добавил Option Explicit, который гарантирует, что вы избежите других ошибок, вызванных, например, орфографическими ошибками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...