Получение Excel для обновления данных на листе из VBA

Как получить данные электронной таблицы в Excel для перерасчета из VBA без необходимости простого изменения значения ячейки?


person Lance Roberts    schedule 30.09.2008    source источник


Ответы (6)


Следующие строки помогут:

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True  

Изменить: метод .Calculate() не будет работать для всех функций. Я протестировал его на листе с надстройкой функций массива. Рабочий лист, который я использую, достаточно сложен, поэтому я не хочу тестировать метод .CalculateFull(), но он может работать.

person Lance Roberts    schedule 30.09.2008
comment
Собственно, для этого существуют методы .Calculate () и .CalculateFull () на разных уровнях. - person GSerg; 30.09.2008
comment
Я тестировал Calculate на листе, и не все функции в ячейке пересчитываются. Вы также можете сделать это, переключив «грязный» бит, но я нашел это самым простым решением. - person Lance Roberts; 30.09.2008
comment
Использование свойства EnableCalculation - хорошая идея, поскольку оно позволяет пересчитывать отдельный лист на уровне рабочего листа. Напротив, Application.CalculateFull принудительно выполняет полный расчет всех данных не только в одном листе или рабочей книге, но и во всех открытых книгах! Это может быть большим излишеством, особенно если у пользователя может быть открыто несколько несвязанных, потенциально сложных книг. - person drwatsoncode; 10.06.2015
comment
Я написал ответ об обновлении активной книги, не делая этого с другими открытыми. - person Calculus Knight; 28.11.2016

Это должно помочь ...

'recalculate all open workbooks
Application.Calculate

'recalculate a specific worksheet
Worksheets(1).Calculate

' recalculate a specific range
Worksheets(1).Columns(1).Calculate
person Graham    schedule 30.09.2008
comment
Для меня Calculate работает, EnableCalculation но не работает - person hoang tran; 02.03.2020

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

Убедитесь, что у вас есть следующий скрипт

ActiveSheet.EnableCalculation = True

Повторно примените уравнение выбора.

Cells(RowA,ColB).Formula = Cells(RowA,ColB).Formula

Затем это можно зациклить по мере необходимости.

person kambeeks    schedule 04.09.2013

Вы также можете попробовать

Application.CalculateFull

or

Application.CalculateFullRebuild

если вы не против перестроить все открытые книги, а не только активный лист. (CalculateFullRebuild также восстанавливает зависимости.)

person Dave DuPlantis    schedule 30.09.2008

У меня возникла проблема с отключением фонового изображения (черновик водяного знака) в VBA. Мое изменение не отображалось (что было выполнено с помощью метода Sheets(1).PageSetup.CenterHeader = ""), поэтому мне нужен был способ обновления. Подход ActiveSheet.EnableCalculation частично помог, но не затронул неиспользуемые ячейки.

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

Application.ScreenUpdating = True

person AjV Jsy    schedule 02.12.2014

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

Sheets("mysheet").Columns("D").Calculate

Но приведенное выше заявление не возымело эффекта. Ни одно из вышеперечисленных решений не помогло, за исключением предложения kambeeks о замене формул сработало и было быстрым, если во время обновления был включен ручной пересчет. Приведенный ниже код решил мою проблему, даже если он не совсем отвечает за комментарий OP "kluge", он обеспечивает быстрое и надежное решение для принудительного пересчета пользовательских ячеек.

Application.Calculation = xlManual
DoEvents
For Each mycell In Sheets("mysheet").Range("D9:D750").Cells
    mycell.Formula = mycell.Formula
Next
DoEvents
Application.Calculation = xlAutomatic
person pghcpa    schedule 24.06.2019