Мне нужно написать простой макрос в Excel с именем «refresh», который выполняет следующие действия:
- очищает текущий лист
- он перебирает все файлы Excel в указанномпапка.Каждый файл содержит только один лист
- . Он объединяет содержимое всех этих листов в один лист, просто добавляя их рядом друг с другом в файле назначения
- , когда изменяется любой из исходных файлов.ничего не должно происходить в файле назначения, пока макрос 'refresh' не будет вызван снова
Я написал некоторый код, который работает нормально.Однако у него есть две проблемы:
- Он работает очень медленно, я уверен, что должен быть более быстрый подход
- Все файлы, с которых я читаю, больше не могут быть изменены, пока я не закрою иreopen excel
Поскольку я совершенно новичок в vba, я хотел бы попросить помощи в устранении этих проблем
Вот код, который я пробовал:
Dim ExcelObj As Object
Dim ExcelBook As Object
Dim ExcelSheet As Object
Cells.ClearContents
Path = ThisWorkbook.Path & "\Sources\"
File = Dir(Path & "*.xls*")
Idx = 1
RowIdx = 3
Set ExcelObj = CreateObject("Excel.Application")
Do Until File = ""
ExcelObj.Workbooks.Open Path & File
Set ExcelBook = ExcelObj.Workbooks(1)
Set ExcelSheet = ExcelBook.Worksheets(1)
If Idx = 1 Then
Offset = 0
Else
Offset = 1
End If
nr = ExcelSheet.UsedRange.Rows.Count
nc = ExcelSheet.UsedRange.Columns.Count
tmp = ExcelSheet.Range(Cells(1 + Offset, 1).Address(), Cells(nr, nc).Address()).Value
Range(Cells(RowIdx, 1).Address(), Cells(RowIdx + nr - 1 - Offset, nc).Address()).Value = tmp
RowIdx = RowIdx + nr - Offset
File = Dir
Idx = Idx + 1
Set ExcelSheet = Nothing
Set ExcelBook = Nothing
Loop
Set ExcelObj = Nothing
Как упоминалось ранее, код работает нормально, по крайней мере, насколько я мог видеть в моих тестах.Однако он довольно медленный и не высвобождает прочитанные файлы.