Вычислить VBA - сейчас, книга, рабочий лист или диапазон

Это руководство научит вас всем различным параметрам вычислений в VBA.

По умолчанию Excel вычисляет все открытые книги при каждом изменении книги. Он делает это, следуя дереву вычислений, где при изменении ячейки A1 обновляются все ячейки, которые полагаются на ячейку A1, и так далее. Однако это может привести к запуску вашего кода VBA. очень медленно, так как каждый раз, когда ячейка изменяется, Excel должен пересчитывать.

Чтобы увеличить скорость VBA, вам часто нужно отключить автоматические вычисления в начале ваших процедур:

1 Application.Calculation = xlManual

и снова включите его в конце:

1 Application.Calculation = xlAutomatic

Однако что, если вы хотите рассчитать все (или часть) ваших рабочих книг в рамках вашей процедуры? Остальная часть этого урока научит вас, что делать.

Рассчитать сейчас

Вы можете использовать команду Рассчитать, чтобы пересчитать все (во всех открытых книгах):

1 Рассчитать

Обычно это лучший метод. Однако вы также можете выполнять более узкие вычисления для повышения скорости.

Рассчитать только лист

Вы также можете указать VBA рассчитывать только определенный лист.

Этот код пересчитает активный лист:

1 ActiveSheet.Calculate

Этот код пересчитает Sheet1:

1 Листы ("Лист1"). Рассчитать

Рассчитать диапазон

Если вам требуется более узкое вычисление, вы можете указать VBA вычислить только диапазон ячеек:

1 Листы ("Лист1"). Диапазон ("a1: a10"). Вычислить

Рассчитать индивидуальную формулу

Этот код будет вычислять только формулу отдельной ячейки:

1 Диапазон ("a1"). Рассчитать

Рассчитать книгу

Нет возможности VBA для расчета только всей книги. Если вам нужно рассчитать всю книгу, лучший вариант - использовать команду Рассчитать:

1 Рассчитать

Это вычислит все открытые книги. Если вас действительно беспокоит скорость и вы хотите рассчитать всю книгу, вы можете более избирательно выбирать, какие книги открываются одновременно.

Рабочая тетрадь по расчетам - методы, которые не работают

Есть несколько методов, которые вы, возможно, захотите использовать, чтобы заставить VBA вычислять только рабочую книгу, однако ни один из них не будет работать должным образом.

Этот код будет перебирать каждый лист в книге и пересчитывать листы по одному:

1234567 Sub Recalculate_Workbook ()Dim ws как рабочий листДля каждого ws в листахws.CalculateСледующий wsКонец подписки

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

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

Вы также можете попробовать выбрать все листы сразу и рассчитать активный лист:

12 ThisWorkbook.Sheets.SelectActiveSheet.Calculate

Однако это вызовет ту же проблему.

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

wave wave wave wave wave