Да, свойства PageSetup очень медленные, когда вы их устанавливаете.
Вы уже установили Application.ScreenUpdating = False
, что хорошо, но в равной степени (или более) важным шагом в этом случае является установка Application.Calculation = xlCalculationManual
. (Лучше всего, если вы сохраните эти настройки, а затем вернете их в исходное в конце.)
Кроме того, свойство get для каждого свойства PageSetup выполняется очень быстро, в то время как это только набор свойств, который является настолько медленным. Поэтому вы должны проверить новый параметр свойства, чтобы убедиться, что он уже не совпадает с существующим значением свойства, чтобы предотвратить ненужный (и дорогостоящий) вызов.
С учетом всего этого, вы должны быть в состоянии использовать код, который выглядит примерно следующим:
Dim origScreenUpdating As Boolean
origScreenUpdating = Application.ScreenUpdating
Application.ScreenUpdating = False
Dim origCalcMode As xlCalculation
origCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
With ActiveSheet.PageSetup
If .PrintHeadings <> False Then .PrintHeadings = False
If .PrintGridlines <> False Then .PrintGridlines = False
If .PrintComments <> xlPrintNoComments Then .PrintComments = xlPrintNoComments
' Etc...
End With
Application.ScreenUpdating = origScreenUpdating
Application.Calculation = origCalcMode
Edit: Пару обновлений:
Для Excel 2010 и выше вы можете использовать свойство Application.PrintCommunication, в то время как для Excel 2007 и ниже вы можете использовать «ExecuteExcel4Macro». Для получения дополнительной информации см. Migrating Excel 4 Macros to VBA.
Для Excel 2007 и ниже еще один интересный трюк заключается в том, чтобы временно назначить драйвер принтера «Microsoft XPS Document Writer», а затем установить его обратно. Скорость печати может увеличиться на 3 раза. См.: Slow Excel PageSetup Methods.
Надеется, что это помогает ...
Я проверю это и дам вам знать, как это сработало для меня. –
Мне удалось получить значительное увеличение, большинство моих наборов были небулевыми значениями, знаете ли вы, что Print Setup - по листу или книге? –
Эй, Лэнс, да, вы можете получить очень большое улучшение, следуя этому подходу - я рад, что это сработало для вас. :-) Настройка страницы предназначена для каждого листа отдельно, а не для книги в целом.(Класс Worksheeet имеет свойство PageSetup, но класс рабочей книги этого не делает.) –