Я хочу скопировать данные из различных файлов Excel, которые находятся в папке, в мастер-файл, и с помощью имеющегося у меня кода я могу это сделать. Однако я сталкиваюсь с двумя проблемами при использовании одного и того же.
1: поскольку макрос запускается каждый раз, когда открывается главный файл, данные из последних файлов снова обновляются (если они обновлялись ранее)
EG: у меня есть file1.xlsx и file2.xlsx в папке. Я хочу скопировать данные из этих файлов и вставить их в мой masterfile.xlsm. Я открываю masterfile.xlsm, и макрос запускается и выполняет работу. Теперь, когда я добавляю file3.xlsx в папку и открываю masterfile.xlsm, данные из file3.xlsx get копируются и вставляются в masterfile. НО, когда я открываю мастер-файл во второй раз и предполагая, что file4.xlsx еще не добавлен в папку, макрос запускается и копирует данные из file3.xlsx СНОВА, так как это последний файл в папке.
(Код, который я использовал, приведен ниже)
Sub up()
Dim MyFile As String, myrecfile As String, mymostrecfile As String
Dim recdate As Date
Dim mydir As String
mydir = "C:\Users\National\Desktop\TEST Codes\PO\Excel\"
Dim fileext As String
fileext = "*.xls"
If Right(mydir, 1) <> "\" Then mydir = mydir & "\"
MyFile = Dir(mydir & "*.xls")
If MyFile <> "" Then
myrecfile = MyFile
recdate = FileDateTime(mydir & MyFile)
Do While MyFile <> ""
If FileDateTime(mydir & MyFile) > recdate Then
myrecfile = MyFile
recdate = FileDateTime(mydir & MyFile)
End If
MyFile = Dir
Loop
End If
mymostrecfile = myrecfile
If mymostrecfile = "" Then
Exit Sub
Else
'do stuff
Application.ScreenUpdating = False
Workbooks.Open Filename:=mydir & mymostrecfile, ReadOnly:=True
Sheets("DETAILED").Range("A3:S15").Copy
Application.DisplayAlerts = False
ActiveWorkbook.Close
Dim LastRow As Long, WS As Worksheet, LS As Long
Set WS = Workbooks("Z master for PO").Worksheets("sheet1")
LastRow = WS.Range("R" & Rows.Count).End(xlUp).Row + 1
WS.Activate
WS.Range("A" & LastRow).Select
ActiveSheet.Paste Destination:=WS.Range("A" & LastRow)
Application.DisplayAlerts = False
ActiveWorkbook.Save
Application.DisplayAlerts = True
Application.CutCopyMode = False
End If
End Sub
2: если файлы соответствуют условиям времени в коде, они обновляются. Но, если мастер-файл обновляется через некоторое время, такие файлы пропускаются, чтобы удовлетворить условию времени, и данные из этих файлов не обновляются.
EG: из-за первой проблемы, которую я пытался
https://stackoverflow.com/a/56749203/9124181 (Спасибо @Tim Stack за это)
Однако я столкнулся с другой проблемой. В коде, присланном мне Тимом, я смог добиться того, чего хотел, но что если я открою мастер-файл, скажем, через час? или вечером? Возможно, мне придется проверять и обновлять мастер-файл в любое время, но только данные из файлов, к которым обращались менее 5 минут назад, будут обновлены. Теперь я всегда могу изменить «время последнего доступа» на 10 минут или любое другое число по своему выбору. Однако время сохранения файлов в папке и время обновления мастер-файла является переменным. Мастер-файл может быть обновлен в течение минуты после сохранения файла Excel или может не обновляться даже в течение нескольких часов. В таком случае ограничение времени 5/10/15 минут не будет работать.
(Пожалуйста, проверьте ссылку для кода)
Единственный способ, о котором я могу думать прямо сейчас, - это копировать данные только из тех файлов Excel, которые не были обновлены / открыты / изменены после первоначального сохранения.
Как мне это исправить? Есть ли лучший способ?