Розрахунок VBA - зараз, робочий зошит, аркуш або діапазон

Цей підручник навчить вас усім різним варіантам обчислення у VBA.

За замовчуванням Excel обчислює всі відкриті книги щоразу, коли вноситься зміна в книгу. Він робить це, слідуючи дереву обчислень, де, якщо клітинку A1 змінюють, вона оновлює всі комірки, які покладаються на клітинку A1 тощо. Однак це може призвести до запуску коду VBA надзвичайно повільно, як і кожного разу, коли змінюється клітинка, Excel має повторно обчислити.

Щоб збільшити швидкість VBA, вам часто потрібно відключити автоматичні розрахунки на початку ваших процедур:

1 Application.Calculation = xlManual

і знову ввімкніть його в кінці:

1 Розрахунок = xlАвтоматичний

Однак що робити, якщо ви хочете обчислити всі (або частину) своїх робочих зошитів у межах вашої процедури? Решта цього підручника навчить вас, що робити.

Розрахуйте зараз

Ви можете скористатися командою «Обчислити», щоб перерахувати все (у всіх відкритих книгах):

1 Обчисліть

Зазвичай це найкращий спосіб використання. Тим не менш, ви також можете виконувати більш вузькі розрахунки для поліпшення швидкості.

Розрахувати лише аркуш

Ви також можете сказати VBA розраховувати лише певний аркуш.

Цей код перерахує активний аркуш:

1 ActiveSheet.Calculate

Цей код буде перераховувати Sheet1:

1 Аркуші ("Аркуш1"). Обчисліть

Розрахувати діапазон

Якщо вам потрібен більш вузький розрахунок, ви можете сказати VBA обчислювати лише діапазон клітинок:

1 Аркуші ("Аркуш1"). Діапазон ("a1: a10"). Обчисліть

Обчисліть індивідуальну формулу

Цей код буде обчислювати лише формулу окремої комірки:

1 Діапазон ("a1"). Обчисліть

Обчисліть робочий зошит

Немає можливості VBA для обчислення лише цілої книги. Якщо вам потрібно обчислити всю книгу, найкращий варіант - скористатися командою Обчислити:

1 Обчисліть

Це обчислить усі відкриті книги. Якщо ви дійсно стурбовані швидкістю і хочете обчислити всю книгу, можливо, ви зможете більш вибірково визначити, які книжки відкриваються одночасно.

Розрахунок робочого зошита - методи, які не працюють

Існує кілька методів, які ви можете мати спокусу використати, щоб змусити VBA обчислити лише книгу, проте жоден із них не працюватиме належним чином.

Цей код прокручуватиме кожен аркуш у книзі та перераховуватиме аркуші по одному:

1234567 Sub Recalculate_Workbook ()Затемнити як робочий аркушДля кожного ws у робочих аркушахрозрахуватиНаступний wsEnd Sub

Цей код буде добре працювати, якщо всі ваші робочі аркуші "автономні", тобто жоден з ваших аркушів не містить обчислень, які посилаються на інші аркуші.

Однак, якщо ваші робочі аркуші посилаються на інші аркуші, ваші розрахунки можуть не оновлюватися належним чином. Наприклад, якщо ви розраховуєте Sheet1 перед Sheet2, але формули Sheet1 спираються на обчислення, зроблені у Sheet2, ваші формули не будуть містити найновіших значень.

Ви також можете спробувати вибрати всі аркуші одночасно та обчислити таблицю активності:

12 ThisWorkbook.Sheets.SelectActiveSheet.Calculate

Однак це викличе таку ж проблему.

Ви допоможете розвитку сайту, поділившись сторінкою з друзями

wave wave wave wave wave