Благодаря всей помощи, которую я получил от ответов на этот пост, и некоторому дополнительному анализу электронной таблицы, над которой я работал, я считаю, что нашел способ достичь желаемых результатов без замедления и увеличения размера файла, которым я занимался.переживает.Я подумал, что было бы неплохо опубликовать мои результаты здесь, если кто-то столкнется с такими же проблемами.
Основной причиной, вызывающей замедление и увеличение размера файла, был не сам код, а способ, которым была сама таблицавыложил, как предложил @Absinthe.Существовали правила условного форматирования в разделе ввода данных календаря, чтобы закрасить даты, которые были выходными, праздничными днями и т. Д. Проблемы, с которыми я столкнулся, были связаны с тем, что исходный код в исходном сообщении копировал все, включая правила условного форматирования назад31 кл.
Поскольку казалось, что команда копирования перезаписывала данные в первый месяц, я думал, что было бы излишним удалять содержимое этого месяца, однако правила условного форматирования просто накладывались друг на друга каждый разкод был запущен.Это приводит к эффекту снежного кома, поскольку число правил условного форматирования в начальные месяцы будет расти в геометрической прогрессии.Это не показалось мне проблемой, так как я не был полностью осведомлен о том, как работают правила форматирования, и предполагал, что они связаны с ячейкой и не будут скопированы командой копирования.
Чтобы обойти эту проблему, я использовал комбинацию sheets.range.value=sheets.range.value
и sheets.range.copy
sheets.range.paste special xlPasteComments
, чтобы получить следующий код.(С1 по С8 - это угловые точки календаря, показанные на фотографии, прикрепленной к исходному сообщению)
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
'Copying entire calender into undo tab for the undo subroutine to use
Sheets(4).Range(C1 & ":" & C8).ClearContents
Sheets(4).Range(C1 & ":" & C8).ClearComments
Sheets(4).Range(C1 & ":" & C8).Value = Sheets(1).Range(C1 & ":" & C8).Value
Sheets(1).Range(C1 & ":" & C8).Copy
Sheets(4).Range(C1).PasteSpecial xlPasteComments
Application.CutCopyMode = False
'Moving the "moving zone" months 31 cells to the left
Sheets(1).Range(C1 & ":" & C6).ClearContents
Sheets(1).Range(C1 & ":" & C6).ClearComments
Sheets(1).Range(C2 & ":" & C8).Copy
Sheets(1).Range(C1).PasteSpecial xlPasteValues
Sheets(1).Range(C2 & ":" & C8).Copy
Sheets(1).Range(C1).PasteSpecial xlPasteComments
Application.CutCopyMode = False
'Clearing the last month to make room for new information
Sheets(1).Range(C3 & ":" & C8).ClearContents
Sheets(1).Range(C3 & ":" & C8).ClearComments
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
Циклы with в начале и конце - это то, что ускоряет код, не обновляяэкран во время работы кода.
Я уверен, что это очень небрежный код, но в его текущей форме он только копирует значения и комментарии, оставляя правила условного форматирования без изменений.Я тестировал запуск подпрограммы несколько десятков раз, и время выполнения и размер файла существенно не меняются от запуска к запуску.