Автоматическое обновление полей Excel при добавлении новых данных - PullRequest
0 голосов
/ 03 мая 2011

У меня есть документ Excel, который начинается с некоторых полей, которые получены из расчетов, выполненных в строках под ним.Для выполнения расчетов у меня в настоящее время есть модуль с примерно 4 функциями, которые перебирают строки от 20 до N (первая пустая ячейка).Эти функции вызываются прямо из ячеек в верхней части листа.Проблема в том, что вычисления сверху не обновляются, когда кто-то добавляет / удаляет данные из строк ниже.Как это можно сделать?

Ответы [ 3 ]

2 голосов
/ 04 мая 2011

Если ваши функции являются пользовательскими функциями Excel VBA, вызываемыми из ячеек рабочего листа, то вы получите это не пересчитывающее поведение, если UDF ссылается на ячейки, которых нет во входных параметрах UDF.

Если это так, то хорошим решением было бы определить некоторые динамические именованные диапазоны, которые расширяются / сжимаются при добавлении / удалении данных, и используют их в качестве входных данных для функции.

Другим решением будет добавление Application.Volatile.к вашему UDF, но это имеет нежелательный побочный эффект, что ваши UDF будут пересчитываться при каждом вычислении, которое может быть мучительно медленным.

0 голосов
/ 04 мая 2011

В вашем модуле листа добавьте событие Worksheet_Change:

Private Sub Worksheet_Change(ByVal rngChanged As Range)

    ' Call your subs and functions here

    MsgBox "You just changed something!"

End Sub

Обратите внимание, что Worksheet_Change sub должен иметь один и только один аргумент типа Range. Excel сделает ссылку на диапазон, который был изменен пользователем листа. Если вы хотите наблюдать за его поведением, попробуйте поместить эту строку в подпункт:

rngChanged.Interior.ColorIndex = 4

Подробнее, например здесь .

0 голосов
/ 04 мая 2011

Если я правильно понимаю ваш вопрос, вы можете использовать событие Worksheet_Change для выполнения таких задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...