Обновить результаты функции Excel VBA
-
08-06-2019 - |
Вопрос
Кто-нибудь знает, как я могу заставить пользовательскую функцию переоценить себя (на основе измененных данных в электронной таблице)?я пробовал F9 и Сдвиг+F9, но они не работают.Единственное, что работает, — это редактирование ячейки с помощью вызова функции и последующее нажатие Enter.Есть идеи?Кажется, я помню, что мог это сделать...
Решение
Вы должны использовать Application.Volatile
в верхней части вашей функции:
Function doubleMe(d)
Application.Volatile
doubleMe = d * 2
End Function
Затем он будет выполнять повторную оценку при каждом изменении книги (если для вашего расчета установлено автоматическое значение).
Другие советы
Дополнительная информация о сочетаниях клавиш F9 для вычислений в Excel.
- F9 Пересчитывает все листы во всех открытых книгах.
- Сдвиг+ F9 Пересчитывает активный лист
- Ctrl+Альтернативный вариант+ F9 Пересчитывает все листы во всех открытых книгах (Полный пересчет)
- Сдвиг + Ctrl+Альтернативный вариант+ F9 Перестраивает дерево зависимостей и выполняет полный перерасчет.
Хорошо, нашел это сам.Вы можете использовать Ctrl+Альтернативный вариант+F9 чтобы добиться этого.
Если вы включите ВСЕ ссылки на данные электронной таблицы в список параметров UDF, Excel будет пересчитывать вашу функцию при каждом изменении данных, на которые ссылаются:
Public Function doubleMe(d As Variant)
doubleMe = d * 2
End Function
Вы также можете использовать Application.Volatile
, но у этого есть тот недостаток, что ваша пользовательская функция всегда пересчитывается - даже если в этом нет необходимости, поскольку ссылочные данные не изменились.
Public Function doubleMe()
Application.Volatile
doubleMe = Worksheets("Fred").Range("A1") * 2
End Function
Чтобы переключиться на автоматический режим:
Application.Calculation = xlCalculationAutomatic
Чтобы переключиться на ручной режим:
Application.Calculation = xlCalculationManual
А Application.Volatile
не работает пересчет формулы с моей собственной функцией внутри.Я использую следующую функцию:Application.CalculateFull
Это обновляет расчет лучше, чем Range(A:B).Calculate
:
Public Sub UpdateMyFunctions()
Dim myRange As Range
Dim rng As Range
' Assume the functions are in this range A1:B10.
Set myRange = ActiveSheet.Range("A1:B10")
For Each rng In myRange
rng.Formula = rng.Formula
Next
End Sub
Public Sub UpdateMyFunctions()
Dim myRange As Range
Dim rng As Range
'Considering The Functions are in Range A1:B10
Set myRange = ActiveSheet.Range("A1:B10")
For Each rng In myRange
rng.Formula = rng.Formula
Next
End Sub