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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
49
0
442 145
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

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

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True  

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

Собственно, для этого существуют методы .Calculate () и .CalculateFull () на разных уровнях.

GSerg 30.09.2008 23:15

Я тестировал Calculate на листе, и не все функции в ячейке пересчитываются. Вы также можете сделать это, переключив «грязный» бит, но я нашел это самым простым решением.

Lance Roberts 30.09.2008 23:26

Использование свойства EnableCalculation - хорошая идея, поскольку оно позволяет пересчитывать отдельный лист на уровне рабочего листа. Напротив, Application.CalculateFull принудительно выполняет полный расчет всех данных не только в одном рабочем листе или рабочей книге, но и в все открытые книги! Это может быть большим излишеством, особенно если у пользователя может быть открыто несколько несвязанных, потенциально сложных книг.

drwatsoncode 10.06.2015 21:47

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

Calculus Knight 28.11.2016 14:12

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

'recalculate all open workbooks
Application.Calculate

'recalculate a specific worksheet
Worksheets(1).Calculate

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

Для меня Calculate выполняет свою работу, но EnableCalculation не работает.

hoang tran 02.03.2020 18:52

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

Application.CalculateFull

или же

Application.CalculateFullRebuild

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

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

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

ActiveSheet.EnableCalculation = True

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

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

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

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

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

Application.ScreenUpdating = True

После обновления подключения к данным некоторые 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

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