Обновление Excel VBA Function Results

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

Я попробовал F9 и Shift+F9.

Единственная вещь, которая, кажется, работает, редактирует ячейку с вызовом функции и затем нажимает Enter.

65
задан Community 14 September 2019 в 00:15
поделиться

5 ответов

Необходимо использовать Application.Volatile в вершине функции:

Function doubleMe(d)
    Application.Volatile
    doubleMe = d * 2
End Function

Это тогда переоценит каждый раз, когда рабочая книга изменяется (если Ваше вычисление установлено на автоматический).

115
ответ дан Bond 24 November 2019 в 15:14
поделиться

Еще некоторая информация о сочетаниях клавиш F9 для вычисления в Excel

  • F9 Повторно вычисляет все рабочие листы во всех открытых рабочих книгах
  • Сдвиг + F9 Повторно вычисляет активный рабочий лист
  • Ctrl + Высокий звук + F9 Повторно вычисляет все рабочие листы во всех открытых рабочих книгах (Полный перерасчет)
  • Сдвиг + Ctrl + Высокий звук + F9 Восстанавливает дерево зависимостей и делает полный перерасчет
36
ответ дан Hulk1991 24 November 2019 в 15:14
поделиться

При включении ВСЕХ ссылок на данные электронной таблицы в списке параметров UDF Excel повторно вычислит функцию каждый раз, когда справочные данные изменяются:

Public Function doubleMe(d As Variant)
    doubleMe = d * 2
End Function

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

Public Function doubleMe()
    Application.Volatile
    doubleMe = Worksheets("Fred").Range("A1") * 2
End Function
11
ответ дан MarredCheese 24 November 2019 в 15:14
поделиться

Хорошо, найденный этим самостоятельно. Можно использовать Ctrl + Высокий звук + F9 для выполнения этого.

15
ответ дан Abhishek 24 November 2019 в 15:14
поделиться

Я нашел, что он лучше всего только обновил вычисление, когда определенная ячейка изменяется. Вот является пример кодом VBA для размещения в событии "Change" "Рабочего листа":

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("F3")) Is Nothing Then
    Application.CalculateFull
  End If
End Sub
1
ответ дан 24 November 2019 в 15:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: