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

StackOverflow https://stackoverflow.com/questions/154434

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True  

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

Другие советы

Это должно сработать...

'recalculate all open workbooks
Application.Calculate

'recalculate a specific worksheet
Worksheets(1).Calculate

' recalculate a specific range
Worksheets(1).Columns(1).Calculate

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

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

ActiveSheet.EnableCalculation = True

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

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

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

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

Application.CalculateFull

или

Application.CalculateFullRebuild

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

У меня возникла проблема с отключением фонового изображения. (ЧЕРНОВИК водяного знака) в ВБА.Мое изменение не появилось (что было выполнено с помощью Sheets(1).PageSetup.CenterHeader = "" метод) - поэтому мне нужен был способ обновить.А ActiveSheet.EnableCalculation подход частично помог, но не затронул неиспользуемые ячейки.

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

Application.ScreenUpdating = True

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

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

Но приведенное выше заявление не имело никакого эффекта.Ни одно из вышеперечисленных решений не помогло, за исключением предложения Камбека заменить формулы, которое работало и работало быстро, если во время обновления включался ручной пересчет.Код ниже решил мою проблему, даже если он не совсем отвечает за комментарий 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top