Мне не нравится этот код.Есть много вещей, против которых я возражаю, но я больше всего недоволен использованием обработки ошибок:
Функциональность обработки ошибок существует для того, чтобы позволить вашей процедуре изящно завершиться неудачей, когда что-то пойдет не так.Он не позволяет вам игнорировать ошибки и продолжать, как если бы они не произошли.
Обработка ошибок не смогла решить проблему с одной из моих рабочих книг.Я не исследовал, но я подозреваю, что проблема заключается либо в длине отдельной ячейки, либо в общей длине данных, передаваемых destrange.Value = sourceRange.Value
.
Однако вы спрашиваете, как сделатьодно изменение, поэтому я ограничусь этим.
Я предлагаю самый простой подход - создать рабочую книгу "Основная" с рабочим листом "Сводка" и включить в нее свой макрос.
Добавитьновые операторы в операторах Dim
:
Dim rnum As Long, CalcMode As Long
'### Start of new code
If Workbooks.Count > 1 Then
' It is easy to get into a muddle if there are multiple workbooks
' open at the start of a macro like this. Avoid the problem until
' you understand it.
Call MsgBox("Please close all other workbooks", vbOKOnly)
Exit Sub
End If
Set BaseWks = ActiveWorkBook.Worksheets("Summary")
With BaseWks
rnum = .Cells(Rows.Count, "A").End(xlUp).Row + 1
End With
'### End of new code
' Change this to the path\folder location of your files.
Первый блок приведенного выше кода гарантирует, что другие рабочие книги не открыты.
Второй блок (1) устанавливает BaseWks
вНа листе «Сводка» и (2) rnum
устанавливается первая неиспользуемая строка в «Сводке».End(xlUp)
является эквивалентом клика VBA Ctrl
+ Up
.Итак, я перешел к нижней части столбца А, поднимался до тех пор, пока не попал в строку со значением, а затем опустился на 1 строку.
Заменить цикл, в котором расположены имена файлов, на:
Do While FilesInPath <> ""
If FilesInPath <> ActiveWorkbook.Name Then
FNum = FNum + 1
ReDim Preserve MyFiles(1 To FNum)
MyFiles(FNum) = FilesInPath
End If
FilesInPath = Dir()
Loop
Я предполагаю, что рабочая книга "Основная" будет находиться в той же папке, что и другие рабочие книги.Это изменение гарантирует, что «Main» не будет использоваться в качестве источника.
Откажитесь от этих утверждений:
Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
rnum = 1
, потому что я уже установил BaseWks
и rnum
на нужные мне значения,
Если вы хотите автоматически сохранить обновленную рабочую книгу «Основная», добавьте следующую фразу выше ExitTheSub:
:
ActiveWorkbook.Save