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

excel vba excel-vba

391961 просмотра

6 ответа

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

Автор: Lance Roberts Источник Размещён: 25.06.2019 01:30

Ответы (6)


56 плюса

Решение

Следующие строки сделают свое дело:

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True  

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

Автор: Lance Roberts Размещён: 30.09.2008 06:54

16 плюса

Это должно сделать свое дело ...

'recalculate all open workbooks
Application.Calculate

'recalculate a specific worksheet
Worksheets(1).Calculate

' recalculate a specific range
Worksheets(1).Columns(1).Calculate
Автор: Graham Размещён: 30.09.2008 07:26

8 плюса

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

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

ActiveSheet.EnableCalculation = True

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

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

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

Автор: kambeeks Размещён: 04.09.2013 07:11

6 плюса

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

Application.CalculateFull

или же

Application.CalculateFullRebuild

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

Автор: Dave DuPlantis Размещён: 30.09.2008 07:52

3 плюса

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

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

Application.ScreenUpdating = True

Автор: AjV Jsy Размещён: 02.12.2014 05:28

0 плюса

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

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
Автор: pghcpa Размещён: 24.06.2019 10:28
32x32