is it possible to recalculate only a cell or a range in VBA ? What I like to use for a sheet is the following, but how to do it on a cell only ? Or range ?
' ActiveSheet.EnableCalculation = False
' ActiveSheet.EnableCalculation = True
ashleedawg
20k8 gold badges73 silver badges104 bronze badges
asked Dec 1, 2011 at 13:16
There is a calculate method you can call on ranges:
Range("A1").Calculate
Try it out by putting =Now() in A1 and running Calculate and watch it update the seconds
You can for a recalc of all the cells in a sheet by using:
Sheets(1).Calculate
See also: Microsoft MSDN, Excel Recalculation, 16 July 2012.
answered Dec 1, 2011 at 13:21
GaijinhunterGaijinhunter
14.5k4 gold badges50 silver badges57 bronze badges
2
Calculate: All open workbooks
Application.Calculate
Calculate: A specific worksheet
Worksheets(1).Calculate
or
Worksheets("sheetname").Calculate
Calculate: A specified row
Worksheets(1).Rows(2).Calculate
or
Worksheets("sheetname").Range("A1").EntireRow.Calculate
Recalculate in Excel
Select the cells you would like to recalculate and press:
Press F9
answered Apr 21, 2019 at 9:23
UniccoUnicco
2,3791 gold badge25 silver badges30 bronze badges
Try this:
Range("A1").Formula = Range("A1").Formula
or
Cells(1, 1).Formula = Cells(1, 1).Formula
It works for me.
sɐunıɔןɐqɐp
3,17715 gold badges36 silver badges39 bronze badges
answered Jan 26, 2021 at 11:59
PituśPituś
11 bronze badge
0
Добрый день. Private Sub Worksheet_Change(ByVal Target As Range) При изменение ячейки A2:A100 в B2:B100 вносится дата изменения, а как быть, если ячейка ссылается на другую. Предположим A2=$C$3, A3=$C$3 и при изменение ячейки C3 измения не будут происходить. |
|
Hugo Пользователь Сообщений: 23254 |
Есть такая мысль — взять эти значения в публичный массив (при загрузке книги), и потом при изменении в диапазоне и связанных (precedents) ячейках сравнивать предыдущий и текущий массивы. По результату действовать, обновить предыдщий массив. |
{quote}{login=Hugo}{date=08.06.2011 06:09}{thema=}{post}Есть такая мысль — взять эти значения в публичный массив (при загрузке книги), и потом при изменении в диапазоне и связанных (precedents) ячейках сравнивать предыдущий и текущий массивы. По результату действовать, обновить предыдщий массив.{/post}{/quote} |
|
Hugo Пользователь Сообщений: 23254 |
Что-то вроде… Код в трёх местах |
Немного не выходит, может я не так объяснил. |
|
Hugo Пользователь Сообщений: 23254 |
Да, не сумели творчески переработать месиджбокс… Private Sub Worksheet_Change(ByVal Target As Range) И ещё — этот код не отслеживает изменение формул, а только значения. Т.е. если вместо =C3 будет написано =C3+D3, но результат не изменится — то код не прореагирует. |
nerv Пользователь Сообщений: 3071 |
{quote}{login=Hugo}{date=08.06.2011 09:51}{thema=}{post}Да, не сумели творчески переработать месиджбокс… Private Sub Worksheet_Change(ByVal Target As Range) И ещё — этот код не отслеживает изменение формул, а только значения. Т.е. если вместо =C3 будет написано =C3+D3, но результат не изменится — то код не прореагирует. люди добрыяяя) подскажите, переменная Variant в данном случае b = Sheets(1).[a2:a100].Value может указывать только на значения? Или, к примеру, на цвет ячейки? |
Юрий М Модератор Сообщений: 60586 Контакты см. в профиле |
На мой взгляд только значения. Но я не добрый. |
nerv Пользователь Сообщений: 3071 |
{quote}{login=Юрий М}{date=08.06.2011 10:54}{thema=}{post}На мой взгляд только значения. Но я не добрый.{/post}{/quote} Благодарю! Вы на себя наговариваете ; ) Да, Вы абсолютно правы. «Переменная Variant может принимать значения любого из простых типов». Объект к коим не относиться. А цвет — это свойство объекта… |
Большое спасибо за помощь, но попытался приблизить данный пример к своей задачи, но так и не вышло. Еще вопрос, возможно ли вместо b = Sheets(1).[D8:D13].Value вписать вместо [D8:D13] — Range(«название региона») и вместо Sheets(«Sheet1») ? Спасибо |
|
Вот пиии … Ошибся темой. Как удалить? Извините. |
|
Hugo Пользователь Сообщений: 23254 |
Разве ошиблись? Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, [rng1]) Is Nothing Or Not Intersect(Target, [rng1].Precedents) Is Nothing Then .Value = «?????» End With Вот только я не понял, куда вопросы планировалось ставить? |
Hugo Пользователь Сообщений: 23254 |
Работает даже так, ещё короче код с именованным диапазоном: Private Sub Workbook_Open() Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [rng1]) Is Nothing Or Not Intersect(Target, [rng1].Precedents) Is Nothing Then .Value = «?????» End With |
Вместо вопросов должна быть формула из ячейки C8 т.е. должно быть умножение ячеек «=B8*D8» в ячейки C8, в ячейки C9 — «=B9*D9» и это все должно меняться при изменение диапазона D9:D13. |
|
А нельзя вместо Cells(i + 7, 5) сделать как было в первом примере через |
|
Hugo Пользователь Сообщений: 23254 |
Ну тут у Вас Targetом будут и [rng1].Precedents, так что к таргету привязываться нельзя. With [rng1].Offset(, 1) Раз уж все вопросы одинаковы. |
Guest Гость |
#18 09.06.2011 01:27:12 буду завтра пробовать что предложили. на счет формул: мне их надо не вность, а просто сделать умножение. в примере я показал что на что надо умножить для каждой ячейки. предположим: range(«b8»)*range(«d9»). данное умножение надо сделать в коде VBA. естественно будет как-то по другому (через cells может-не силен пока что, надо почитать чего). соответственно вместо вопросительных знаков должно быть умножение ячеек. надеюсь так более понятно? |
Как принудительно произвести пересчет значений в ячейках? |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
I am using all the solutions that appear in:
How to refresh ALL cell through VBA
Getting Excel to refresh data on sheet from within VBA
ActiveSheet.EnableCalculation = False
ActiveSheet.EnableCalculation = True
or
Application.Calculate
or
Application.CalculateFull
None of them works in Excel 2010. When I go to the cell and right click refresh it works. How can I refresh within VBA?
Sheets("Name_of_sheet").Range("D424").Refresh
raises an
exception 438
Questions:
- How can I make the script support Excel 2003, 2007, 2010?
- How can I choose the source file to refresh from using VBA?
EDIT:
-
I want to simulate a right mouse click and choose refresh in the menu in
worksheet 3
. That is the entire story. -
I work on an Excel file created 10 years ago. When opening in Excel 2010, I can go to a cell and right click on it and choose refresh and then choose the .txt file to refresh from. I am trying to do it automatically within VBA.
asked Nov 22, 2012 at 13:39
6
You could try using Application.Calculation
Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic
answered Nov 22, 2012 at 13:42
4
For an individual cell you can use:
Range("D13").Calculate
OR
Cells(13, "D").Calculate
0x90
38.9k36 gold badges163 silver badges244 bronze badges
answered Nov 22, 2012 at 13:46
InContextInContext
2,46112 silver badges24 bronze badges
1
I finally used mouse events and keystrokes to do it:
Sheets("worksheet34").Select
Range("D15").Select
Application.WindowState = xlMaximized
SetCursorPos 200, 600 'set mouse position at 200, 600
Call mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0) 'click left mouse
Application.SendKeys ("R")
answered Nov 29, 2012 at 5:52
0x900x90
38.9k36 gold badges163 silver badges244 bronze badges
2
just a reminder;
be careful when using
Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic
this sets the entire excel application to calculate formula’s either automatically or manually. If you use
Application.Calculation = xlCalculationManual
you’ll notice your automatic formulas no longer work.
cheers
answered Feb 16, 2016 at 17:53
You can force excel to recalculate a cell or range of cells by marking the cell/range as dirty.
Example :
' Recalculate Column D4 to D24
Sheets("Name_of_sheet").Range("D4:D24").Dirty
or
' Recalculate Cell D4<br>
Sheets("Name_of_sheet").Range("D4").Dirty<br>
Ike
7,8904 gold badges11 silver badges29 bronze badges
answered Sep 5, 2021 at 11:16
Application.Calculate
didn’t work for my function. Not even when followed by DoEvents
.
What I found that works is to re-enter the formula in the cell.
A simple way to get the formula is to start recording a macro
, use F2
to edit the cell, then press enter
. The macro will make a great copy of the function text with all needed quotes.
Below is an example.
Sheets("Name_of_sheet").Range("D424").FormulaR1C1 = "=now()"
svyat1s
8689 gold badges12 silver badges21 bronze badges
answered Mar 5, 2021 at 19:36
Cells(x, y).Select
ActiveCell.FormulaR1C1 = Selection.Value
works perfectly for me
answered Aug 2, 2022 at 20:21
I have a long «macro» in a workbook > 20 MB, tens of thousands of lines, that calls a dll written in Fortran. None of these methods worked:
Call Application.Calculate
Call Application.CalculateFull
Call Application.CalculateFullRebuild
Re-entering the formula
Range.Dirty
Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic
ThisWorkbook.ActiveSheet.EnableCalculation = False
ThisWorkbook.ActiveSheet.EnableCalculation = True
This worked:
On Error Resume Next
Application.SendKeys "{F2}{Enter}{NumLock}" 'SendKeys turns off NumLock for some reason
On Error GoTo 0
This even worked when a chart was selected.
answered Feb 9 at 14:47
Rocky ScottRocky Scott
4364 silver badges13 bronze badges
Из-за частого использования сложных формул в Excel многие пользователи Excel склонны менять расчет книги с автоматического расчета на ручной. В ручном режиме вычисления вам необходимо пересчитать ячейки формулы, чтобы получить обновленный результат при изменении значений ссылочных ячеек. В этой статье мы покажем вам, как пересчитать или обновить только выбранные ячейки в Excel.
Пересчитывать или обновлять только выбранные ячейки с помощью сочетания клавиш
Пересчитывать или обновлять только выбранные ячейки с кодом VBA
Пересчитывать или обновлять только выбранные ячейки с помощью сочетания клавиш
Предположим, что формулы находятся в диапазоне F2: F10, как показано на скриншоте ниже. После изменения значений в столбце D или E вам необходимо пересчитать ячейки формулы в столбце F, чтобы получить новые результаты. Пожалуйста, сделайте следующее.
1. После изменения значений опорных ячеек выберите ячейки формулы, которые необходимо пересчитать, затем нажмите кнопку F9 ключ. Затем вы можете увидеть, что результаты выбранных ячеек формулы обновляются сразу.
Внимание: После нажатия этой клавиши выреза все формулы на листе, которые меняют ссылочные ячейки, будут обновлены сразу.
Пересчитывать или обновлять только выбранные ячейки с кодом VBA
Кроме того, вы можете запустить следующий код VBA, чтобы пересчитать только выбранные ячейки в Excel.
1. Выберите ячейки формулы, которые необходимо пересчитать, затем нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.
2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте и вставьте приведенный ниже код VBA в окно модуля.
Код VBA: пересчитывать только выбранные ячейки в Excel
Public Sub RecalculateSelection()
If TypeName(Selection) = "Range" Then Selection.Calculate
End Sub
3. нажмите F5 для запуска кода, то выбранные ячейки формулы немедленно пересчитываются.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (1)
Оценок пока нет. Оцените первым!