Excel vba отключить формулы

Return to VBA Code Examples

In this Article

  • Turn Off Automatic Calculations
  • Turn Automatic Calculations Back On
  • Disable Automatic Calculations Macro Example
  • Manual Calculation
    • VBA Settings – Speed Up Code
  • VBA Coding Made Easy

Whenever you update a cell value, Excel goes through a process to recalculate the workbook. When working directly within Excel you want this to happen 99.9% of the time (the exception being if you are working with an extremely large workbook). However, this can really slow down your VBA code. It’s a good practice to set your calculations to manual at the beginning of macros and restore calculations at the end of macros. If you need to recalculate the workbook you can manually tell Excel to calculate.

Turn Off Automatic Calculations

You can turn off automatic calculation with a macro by setting it to xlmanual. Use the following piece of VBA code:

Application.Calculation = xlManual

Turn Automatic Calculations Back On

To turn back on automatic calculation with the setting xlAutomatic:

Application.Calculation = xlAutomatic

I recommend disabling Automatic calculations at the very beginning of your procedure and re-enabling Automatic Calculations at the end. It will look like this:

Disable Automatic Calculations Macro Example

Sub Auto_Calcs_Example()
    Application.Calculation = xlManual

    'Do something


    Application.Calculation = xlAutomatic
End Sub

vba disable automatic calculations

Manual Calculation

When Automatic calculations are disabled, you can use the Calculate command to force Excel to recalculate:

Calculate

You can also tell Excel to recalculate only an individual worksheet:

Worksheets("sheet1").Calculate

You can also tell VBA to recalculate just a range (click to read our article about VBA calculation methods)

Here is how this might look inside a macro:

Sub Auto_Calcs_Example_Manual_Calc()
    Application.Calculation = xlManual

    'Do Something

    'Recalc
    Calculate
    
    'Do More Things


    Application.Calculation = xlAutomatic
End Sub

VBA Settings – Speed Up Code

If your goal is to speed up your code, you should also consider adjusting these other settings:

Disabling Screenupdating can make a huge difference in speed:

Application.ScreenUpdating = False

Turning off the Status Bar will also make a small difference:

Application.DisplayStatusBar = False

If your workbook contains events you should also disable events at the start of your procedures (to speed up code and to prevent endless loops!):

Application.EnableEvents = False

Last, your VBA code can be slowed down when Excel tries to re-calculate page breaks (Note: not all procedures will be impacted).  To turn off DisplayPageBreaks use this line of code:

ActiveSheet.DisplayPageBreaks = False

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

alt text

Learn More!

 

bobyjoy

Пользователь

Сообщений: 218
Регистрация: 15.11.2016

Уважаемые коллеги добрый день

Подскажите пожалуйста есть как в коде в ВБА прописать перед началом работы макроса отключение автоматического пересчета формул КРОМЕ текущего листа (где работает макрос) в VBA и затем после отработки макроса, обратно включить везде пересчет формул?

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

Цикл по листам. У неугодных вырубаем калькуляцию (sheets(i).enablecalculation=false). Перед окончанием кода в цикле врубаете калькуляцию.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#3

21.04.2017 16:45:46

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

Код
Sheets(2).UsedRange.Calculate

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

bobyjoy

Пользователь

Сообщений: 218
Регистрация: 15.11.2016

Почему то не получается, отключается везде пересчет.

 

bobyjoy

Пользователь

Сообщений: 218
Регистрация: 15.11.2016

The_Priest
Sheets(2).UsedRange.Calculate вроде сработало, А как макросом отключать везде пересчет сразу  активбук? и потом включать, я понимаю, что могу записать макрос, но думаю, есть лучше код.

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#6

25.04.2017 10:40:25

Цитата
bobyjoy написал:
везде пересчет сразу  активбук

расшифруйте. Везде — это где? В активной книге, во всем приложении? Или что еще?  

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

kuklp

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

bobyjoy, мой Вам совет, опишите свою задачу(с примером, как положено), а не Ваше видение ее решения. Может получите гораздо более эффективный результат.

Я сам — дурнее всякого примера! …

 

bobyjoy

Пользователь

Сообщений: 218
Регистрация: 15.11.2016

У меня маркос лагает, медленно считает, если на любой книге открытой включая текущую ( в которой макрос) и сторонюю, есть какие либо масивы с формлами (не относятся к макросу). Если отключать автоматический пересчет, в таком случае он работает быстро. Я переключил пересчет на ручной и благодаря макросу Sheets(2).UsedRange.Calculate он стал работать быстро.

 

bobyjoy

Пользователь

Сообщений: 218
Регистрация: 15.11.2016

Sheets(«Pivot2»).UsedRange.Calculate всетаки не много не корректно считает, подскажите пожалуйста отражает ли эта формула активизацию пересчта на всем листе (всех сводных и формул)?

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

UsedRange — это все ячейки, в которых есть значение, формула или форматирование. Следовательно да. Но сводные отдельные объекты и они не будут пересчитываться методом Calculate, т.к. пересчет на них вообще не влияет. У них есть метод Refresh.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

bobyjoy

Пользователь

Сообщений: 218
Регистрация: 15.11.2016

#11

25.04.2017 12:02:13

Код
Sub ttt()
Application.ScreenUpdating = False
'arrBaza = Range("AH2:AH" & Cells(Rows.Count, "AH").End(xlUp).Row).Value
LB = Cells(Rows.Count, "AH").End(xlUp).Row
LS = Cells(Rows.Count, "H").End(xlUp).Row
Sheets("Итог").PivotTables("СводнаяТаблица3").PivotCache.Refresh
MsgBox LB
Application.Calculation = xlManual
For I = 2 To LB
    'Cells(I, "AI").Value = 10
    Sheets("Pivot2").UsedRange.Calculate
    ActiveSheet.PivotTables("СводнаяТаблица2").PivotCache.Refresh
    'MsgBox
    Application.StatusBar = Str(I)
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Barcode")
       .PivotItems(Trim(Str(Cells(I, "AH").Value))).Visible = True
       If I > 2 Then
        .PivotItems(Trim(Str(Cells(I - 1, "AH").Value))).Visible = False
       Else
        .PivotItems(Trim(Str(Cells(LB, "AH").Value))).Visible = False
       End If
       
    End With
    
    
    For K = 2 To LS
        Cells(2, "P") = Cells(K, "M").Value
        If Cells(1, "AD").Value = 0 Then Exit For
    Next
    
    
    If Cells(1, "AD").Value = 0 Then
    c = Cells(2, "AD").Value
    Else
    c = 0
    End If
    If c = 0 Then GoTo 1
    For J = 2 To LS
        If Trim(Cells(J, "H").Value) = Trim(Cells(2, "P").Value) Then
            Cells(J, "J") = Cells(J, "J").Value + c
            
        Exit For
        End If
    Next
    Cells(I, "AI").Value = Trim(Cells(2, "P").Value)
1:
Next
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
End Sub

Посмотрите пожалуйста если есть возможность, как мне сделать так что бы все свобные несмотря на отключенный пересчет обновлялись при каждой итерации в коде?

Изменено: bobyjoy25.04.2017 13:30:07

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#12

25.04.2017 12:11:33

Цитата
bobyjoy написал:
так что бы все свобные несмотря

я уже написал — сводные и так обновляются несмотря на пересчет. Они от него вообще не зависят. Другой вопрос в том, что скорее всего есть необходимость пересчитывать формулы таблиц, являющихся источником данных для этих сводных.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

Содержание

  • Отключить автоматические вычисления
  • Снова включите автоматические вычисления
  • Пример макроса «Отключить автоматические вычисления»
  • Расчет вручную

Каждый раз, когда вы обновляете значение ячейки, Excel выполняет процесс пересчета книги. При работе непосредственно в Excel вы хотите, чтобы это происходило в 99,9% случаев (за исключением случаев, когда вы работаете с очень большой книгой). Однако это может действительно замедлить ваш код VBA. Рекомендуется устанавливать вычисления вручную в начале макроса и восстанавливать вычисления в конце макроса. Если вам нужно пересчитать книгу, вы можете вручную указать Excel для расчета.

Отключить автоматические вычисления

Вы можете отключить автоматический расчет с помощью макроса, установив для него значение xlmanual. Используйте следующий фрагмент кода VBA:

1 Application.Calculation = xlManual

Снова включите автоматические вычисления

Чтобы снова включить автоматический расчет с настройкой xlAutomatic:

1 Application.Calculation = xlAutomatic

Я рекомендую отключить автоматические вычисления в самом начале процедуры и снова включить автоматические вычисления в конце. Это будет выглядеть так:

Пример макроса «Отключить автоматические вычисления»

12345678 Sub Auto_Calcs_Example ()Application.Calculation = xlManual’Сделай что-нибудьApplication.Calculation = xlAutomaticКонец подписки

Расчет вручную

Когда автоматические вычисления отключены, вы можете использовать Рассчитать команда для принудительного пересчета Excel:

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

1 Рабочие листы («лист1»). Рассчитать

Вы также можете указать VBA пересчитать только диапазон (щелкните, чтобы прочитать нашу статью о методах вычисления VBA)

Вот как это может выглядеть внутри макроса:

12345678910111213 Sub Auto_Calcs_Example_Manual_Calc ()Application.Calculation = xlManual’Сделай что-нибудь’RecalcРассчитать’Делай больше вещейApplication.Calculation = xlAutomaticКонец подписки

Настройки VBA — код ускорения

Если ваша цель — ускорить код, вам также следует подумать о настройке следующих параметров:

Отключение обновления экрана может существенно повлиять на скорость:

1 Application.ScreenUpdating = False

Отключение строки состояния также имеет небольшое значение:

1 Application.DisplayStatusBar = False

Если ваша книга содержит события, вам также следует отключить события в начале ваших процедур (чтобы ускорить код и предотвратить бесконечные циклы!):

1 Application.EnableEvents = False

Наконец, ваш код VBA может замедлиться, когда Excel пытается повторно вычислить разрывы страниц (Примечание: не все процедуры будут затронуты). Чтобы отключить DisplayPageBreaks, используйте эту строку кода:

1 ActiveSheet.DisplayPageBreaks = False

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

Содержание

  1. VBA — отключить (или включить) автоматические вычисления
  2. Отключить автоматические вычисления
  3. Снова включите автоматические вычисления
  4. Пример макроса «Отключить автоматические вычисления»
  5. Расчет вручную
  6. Настройки VBA — код ускорения
  7. VBA – Turn Automatic Calculations Off (or On)
  8. Turn Off Automatic Calculations
  9. Turn Automatic Calculations Back On
  10. Disable Automatic Calculations Macro Example
  11. Manual Calculation
  12. VBA Settings – Speed Up Code
  13. VBA Coding Made Easy
  14. VBA Code Examples Add-in
  15. Как ускорить и оптимизировать код VBA

VBA — отключить (или включить) автоматические вычисления

Каждый раз, когда вы обновляете значение ячейки, Excel выполняет процесс пересчета книги. При работе непосредственно в Excel вы хотите, чтобы это происходило в 99,9% случаев (за исключением случаев, когда вы работаете с очень большой книгой). Однако это может действительно замедлить ваш код VBA. Рекомендуется устанавливать вычисления вручную в начале макроса и восстанавливать вычисления в конце макроса. Если вам нужно пересчитать книгу, вы можете вручную указать Excel для расчета.

Отключить автоматические вычисления

Вы можете отключить автоматический расчет с помощью макроса, установив для него значение xlmanual. Используйте следующий фрагмент кода VBA:

1 Application.Calculation = xlManual

Снова включите автоматические вычисления

Чтобы снова включить автоматический расчет с настройкой xlAutomatic:

1 Application.Calculation = xlAutomatic

Я рекомендую отключить автоматические вычисления в самом начале процедуры и снова включить автоматические вычисления в конце. Это будет выглядеть так:

Пример макроса «Отключить автоматические вычисления»

12345678 Sub Auto_Calcs_Example ()Application.Calculation = xlManual’Сделай что-нибудьApplication.Calculation = xlAutomaticКонец подписки

Расчет вручную

Когда автоматические вычисления отключены, вы можете использовать Рассчитать команда для принудительного пересчета Excel:

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

1 Рабочие листы («лист1»). Рассчитать

Вы также можете указать VBA пересчитать только диапазон (щелкните, чтобы прочитать нашу статью о методах вычисления VBA)

Вот как это может выглядеть внутри макроса:

12345678910111213 Sub Auto_Calcs_Example_Manual_Calc ()Application.Calculation = xlManual’Сделай что-нибудь’RecalcРассчитать’Делай больше вещейApplication.Calculation = xlAutomaticКонец подписки

Настройки VBA — код ускорения

Если ваша цель — ускорить код, вам также следует подумать о настройке следующих параметров:

Отключение обновления экрана может существенно повлиять на скорость:

1 Application.ScreenUpdating = False

Отключение строки состояния также имеет небольшое значение:

1 Application.DisplayStatusBar = False

Если ваша книга содержит события, вам также следует отключить события в начале ваших процедур (чтобы ускорить код и предотвратить бесконечные циклы!):

1 Application.EnableEvents = False

Наконец, ваш код VBA может замедлиться, когда Excel пытается повторно вычислить разрывы страниц (Примечание: не все процедуры будут затронуты). Чтобы отключить DisplayPageBreaks, используйте эту строку кода:

Источник

VBA – Turn Automatic Calculations Off (or On)

In this Article

Whenever you update a cell value, Excel goes through a process to recalculate the workbook. When working directly within Excel you want this to happen 99.9% of the time (the exception being if you are working with an extremely large workbook). However, this can really slow down your VBA code. It’s a good practice to set your calculations to manual at the beginning of macros and restore calculations at the end of macros. If you need to recalculate the workbook you can manually tell Excel to calculate.

Turn Off Automatic Calculations

You can turn off automatic calculation with a macro by setting it to xlmanual. Use the following piece of VBA code:

Turn Automatic Calculations Back On

To turn back on automatic calculation with the setting xlAutomatic:

I recommend disabling Automatic calculations at the very beginning of your procedure and re-enabling Automatic Calculations at the end. It will look like this:

Disable Automatic Calculations Macro Example

Manual Calculation

When Automatic calculations are disabled, you can use the Calculate command to force Excel to recalculate:

You can also tell Excel to recalculate only an individual worksheet:

You can also tell VBA to recalculate just a range (click to read our article about VBA calculation methods)

Here is how this might look inside a macro:

VBA Settings – Speed Up Code

If your goal is to speed up your code, you should also consider adjusting these other settings:

Disabling Screenupdating can make a huge difference in speed:

Turning off the Status Bar will also make a small difference:

If your workbook contains events you should also disable events at the start of your procedures (to speed up code and to prevent endless loops!):

Last, your VBA code can be slowed down when Excel tries to re-calculate page breaks (Note: not all procedures will be impacted). To turn off DisplayPageBreaks use this line of code:

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

Источник

Как ускорить и оптимизировать код VBA

  1. Если в коде есть много всяких Activate и Select , тем более в циклах — следует немедленно от них избавиться. Как это сделать я писал в статье: Select и Activate — зачем нужны и нужны ли?
  2. Обязательно на время выполнения кода отключить:
    • автоматический пересчет формул . Чтобы формулы не пересчитывались при каждой манипуляции на листе во время выполнения кода — это может дико тормозить код, если формул много:

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

если печать производится внутри кода, то эту строку желательно вставить сразу после строки, выводящей лист на печать(при условии, что печать не происходит в цикле. В этом случае — по завершению цикла печати).
Я советую всегда отключать разбиение на страницы, т.к. это может тормозить весьма значительно, т.к. заставляет при любом изменении на листах обращаться к принтеру и переопределять кол-во и размер печатных страниц. А это порой очень не быстро.
На всякий случай можно отключить отображение информации в строке статуса Excel (в каких случаях там вообще отображается информация и зачем можно узнать в статье: Отобразить процесс выполнения). Хоть это и не сильно поедает ресурсы — иногда может все же ускорить работу кода:

Главное, что следует помнить — все эти свойства необходимо включить обратно после работы кода . Иначе могут быть проблемы с работой внутри Excel. Например, если забыть включить автопересчет формул — большинство формул будут пересчитывать исключительно принудительным методом — после нажатия сочетания клавиш Shift + F9 . А если забыть отключить обновление экрана — то есть шанс заблокировать себе возможность работы на листах и книгах. Хотя по умолчанию свойство ScreenUpdating и должно возвращаться в True, если было отключено внутри процедуры — лучше не надеяться на это и привыкать возвращать все свойства на свои места принудительно. По сути все это сведется к нескольким строкам:

‘Возвращаем обновление экрана Application.ScreenUpdating = True ‘Возвращаем автопересчет формул Application.Calculation = xlCalculationAutomatic ‘Включаем отслеживание событий Application.EnableEvents = True

Как такой код выглядит на практике. Предположим, надо записать в цикле в 10 000 строк значения:

Sub TestOptimize() ‘отключаем обновление экрана Application.ScreenUpdating = False ‘Отключаем автопересчет формул Application.Calculation = xlCalculationManual ‘Отключаем отслеживание событий Application.EnableEvents = False ‘Отключаем разбиение на печатные страницы ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False ‘Непосредственно код заполнения ячеек Dim lr As Long For lr = 1 To 10000 Cells(lr, 1).Value = lr ‘для примера просто пронумеруем строки Next ‘Возвращаем обновление экрана Application.ScreenUpdating = True ‘Возвращаем автопересчет формул Application.Calculation = xlCalculationAutomatic ‘Включаем отслеживание событий Application.EnableEvents = True End Sub

Разрывы печатных страниц можно не возвращать — они тормозят работу в любом случае.
Следует избегать циклов, вроде Do While для поиска последней ячейки . Часто такую ошибку совершают начинающие. Куда эффективнее и быстрее вычислять последнюю ячейку на всем листе или в конкретном столбце без этого тормозного цикла Do While. Я обычно использую

другие варианты определения последней ячейки я детально описывал в статье: Как определить последнюю ячейку на листе через VBA?

Для более опытных пользователей VBA я приведу несколько решений по оптимизации кодов в различных ситуациях:

    Самая хорошая оптимизация кода, если приходится работать с ячейками листа напрямую, обрабатывать их и, возможно, изменять значения, то быстрее все обработки делать в массиве и разом выгружать на листе. Например, код выше по заполнению ячеек номерами будет в этом случае выглядеть так:

Sub TestOptimize_Array() ‘Непосредственно код заполнения ячеек Dim arr, lr As Long ‘запоминаем в массив одним махом все значения 10000 строк первого столбца arr = Cells(1, 1).Resize(10000).Value ‘если нужно заполнение для двух и более столбцов ‘arr = Cells(1, 1).Resize(10000, 2).Value ‘или ‘arr = Range(Cells(1, 1),Cells(10000, 2)).Value ‘или автоматически вычисляем последнюю ячейку и заносим в массив данные, начиная с ячейки А3 ‘llastr = Cells(Rows.Count, 1).End(xlUp).Row ‘последняя ячейка столбца А ‘arr = Range(Cells(3, 1),Cells(llastr, 2)).Value For lr = 1 To 10000 arr(lr,1) = lr ‘заполняем массив порядковыми номерами Next ‘Выгружаем обработанный массив обратно на лист в те же ячейки Cells(1, 1).Resize(10000).Value = arr End Sub

Но здесь следует учитывать и тот момент, что большие массивы могут просто вызвать переполнение памяти. Наиболее актуально это для 32-битных систем, где на VBA и Excel выделяется памяти меньше, чем в 64-битных системах

  • Если используете быстрый ЕСЛИ — IIF , то замените его на IF . Then . Else
  • Так же лучше вместо Switch() и Choose() применить тот же IF . Then . Else
  • В большинстве случаев проверять строку на «не пусто» лучше через Len() , чем прямое сравнение с пустотой: Len(s)=0 вместо s = «» . Связано с тем, что работа со строками значительно медленнее, чем с числовыми данными и Len по сути не подсчитывает длину переменной, а берет это число непосредственно уже готовое из памяти. При сравнении же текста с пустой строкой(«»), VBA сначала создает в памяти переменную нулевой длинны, а уже потом сравнивает с ней наш текст. Поэтому в некоторых случаях так же ускоряет сравнение и в таком виде: s = vbNullString
  • Не применять объединение строк без необходимости. Например, s = «АВ» , будет быстрее, чем: s =»А» & «В»
  • Не применять сравнение текстовых величин напрямую. Лучше применить встроенную функцию StrComp:
    If s <> s1 Then будет медленнее, чем
    If StrComp(s, s1, vbBinaryCompare) <> 0
    и тем более, если при сравнении необходимо не учитывать регистр:
    If LCase(s) <> LCase(s1) Then будет медленнее, чем
    If StrComp(s, s1, vbTextCompare) <> 0
  • Циклы For … Next в большинстве случаев работает быстрее, чем цикл Do . Lоор
  • Избегать присвоения переменным типа Variant . Хоть соблазн и велик — этот тип забирает много памяти и в дальнейшем замедляет работу кода. Так же для объектных переменных следует избегать по возможности безликого глобального типа Object и применять конкретный тип:

    Dim rRange as Object, wsSh as Object

    будет медленнее работать, чем:

    Dim rRange as Range, wsSh as Worksheet

    Причина в том, что при объявлении As Object мы не даем VBA практически никакой информации о типе данных, кроме того, что это какой-то объект. И VBA приходится «на лету» внутри кода при каждом обращении к такой переменной определять её конкретный тип(Range, Worksheet, Workbook, Chart и т.д.). Что опять же занимает время.
    Если работаете с массивами, то можно при объявлении указать это явно:

    Такая инициализация происходит быстрее.
    А еще лучше будет при этом еще и тип данных сразу присвоить:

    Dim arr() as string, arr2() as long

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

    Конечно, это не все приемы и решения для оптимизации. Но на первых парах должно хватить. Плюс, всегда следует исходить из здравого смысла . Например, если код выполняется за 2 секунды, то вероятно нет смысла его дальше оптимизировать. Конечно, если этот код не из тех, которые просто изменяют значение одной-двух ячеек.

    Статья помогла? Поделись ссылкой с друзьями!

    Источник

  • How to stop formulas and functions from updating in Excel when running a macro. This can save you a lot of time if you have a large or complex spreadsheet that relies on lots of formulas or cross-spreadsheet functions.

    Sections:

    Code

    Example

    Notes

    Code

    Disable Calculations

    Prevent Excel from updating formulas and functions automatically. This should go at the start of your macro.

    Application.Calculation = xlCalculationManual
    

    Enable Calculations

    Enable normal formula/function updating once again. This should go at the end of your macro.

    Application.Calculation = xlCalculationAutomatic
    

    a04423268900182a4c3e00fa558cb264.jpg

    Example

    Here, I will make a small macro that inserts the value «hi» into cell C1. In the same worksheet, I have a few RAND() functions that generate a random decimal number each time the worksheet is recalculated, such as when a value is input into a cell.

    Here is the full macro:

    Sub insert_value()
    
    Application.Calculation = xlCalculationManual
    
    'Code to run here
    Range("C1").Value = "hi"
    
    Application.Calculation = xlCalculationAutomatic
    End Sub
    

    53e306a8466e710f82ed04c2ad741125.jpg

    Here is the spreadsheet after I run the macro:

    57ff98744408cc477e6a9363bb422dc1.png

    You can see the three RAND values on the left.

    If you just ran the macro you will notice that the RAND values did update! However, it will have happened so fast that you couldn’t have noticed that the calculation did not happen after the value was input into cell C1 but, instead, it happened when calculations were turned back on at the end of the macro.

    Note: once you turn the calculations back on, everything will recalculate at that moment.

    If you do not want the spreadsheet to recalculate, just remove or comment-out the last line like this:

    6db1302530fd0bcc37b66043db165de1.jpg

    When I run this code, the RAND values will now not update at all.

    Note: if you turn calculations off in a macro, that means that you will need to manually turn them back on or manually calculate them.

    Turn Calculations (back) On Manually

    Formulas tab > Calculation section > Then click Calculate Now or Calculate Sheet to calculate the worksheet but leave the calculation setting the same or click Calculation Options and then choose the desired calculation setting.

    6c5731adfcdf4ad5d91f03523a7341eb.jpg

    Notes

    This is one of those things that is not always needed for your macros. If you have a small worksheet and there are no performance issues when updating formulas and functions, then don’t worry about using this.

    However, if you notice a lag from when you enter data to when the spreadsheet «catches-up» and updates everything, then this code will help your macros run faster.

    In the attached file, the calculation code has been commented-out so you can test it with and without that code.

    Make sure to download the attached file to work with these examples in Excel.

    Similar Content on TeachExcel

    Prevent Excel Alerts and Messages Appearing While Running a Macro in Excel

    Tutorial: How to stop an Excel alert window or message box from appearing while running a macro. Thi…

    Run a Macro When a Specific Cell Changes in Excel

    Tutorial:
    Run a macro in Excel when a specific cell is changed; this also covers when a cell within…

    Get Data from the Worksheet into a Macro in Excel

    Tutorial: Here, you’ll learn how to get information from the Excel worksheet into a macro so you can…

    Put Data into a Worksheet using a Macro in Excel

    Tutorial: How to input data into cells in a worksheet from a macro.
    Once you have data in your macro…

    What is a Macro in Excel?

    Tutorial: This is the first step to learning about Macros for Excel and how to use them. 
    What is a…

    5 Simple Tips for Making BETTER Macros in Excel!

    Tutorial:
    5 ways to make better Macros in Excel — fewer errors, smoother coding, less fuss!
    These 5…

    Subscribe for Weekly Tutorials

    BONUS: subscribe now to download our Top Tutorials Ebook!

    Понравилась статья? Поделить с друзьями:
  • Excel vba отключить условное форматирование
  • Excel vba отключить диалоговые окна
  • Excel vba отключить визуализацию
  • Excel vba остаток при делении
  • Excel vba определить что это число