Кто-нибудь знает, как я могу получить определенную пользователем функцию для переоценки себя (на основе измененных данных в электронной таблице)? Я пробовал F9 и Shift + F9, но они не работают. Единственное, что работает, это редактирование ячейки вызовом функции, а затем нажатие Enter. Есть идеи? Кажется, я помню, что могу это сделать...
Обновить результаты функции Excel VBA
Ответ 1
Вы должны использовать Application.Volatile
в верхней части своей функции:
Function doubleMe(d)
Application.Volatile
doubleMe = d * 2
End Function
Затем он будет переоцениваться всякий раз, когда изменяется рабочая книга (если ваш расчет установлен на автоматический).
Ответ 2
Дополнительная информация о быстрых клавишах F9 для вычисления в Excel
- F9 Пересчет всех листов во всех открытых книгах
- Shift + F9 Пересчет активного рабочего листа
- Ctrl + Alt + F9 Пересчет всех листов во всех открытых книгах (Полный пересчет)
- Shift + Ctrl + Alt + F9 Перестраивает дерево зависимостей и выполняет полный пересчет
Ответ 3
Хорошо, нашел это сам. Вы можете использовать Ctrl + Alt + F9, чтобы выполнить это.
Ответ 4
Если вы включите ВСЕ ссылки на данные электронной таблицы в список параметров 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
Ответ 5
Чтобы переключиться на автоматический:
Application.Calculation = xlCalculationAutomatic
Чтобы переключиться на ручной режим:
Application.Calculation = xlCalculationManual
Ответ 6
Это обновляет расчет лучше, чем 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
Ответ 7
Используя Excel 2010, я столкнулся с теми же проблемами, что и Брайан. Когда я попробовал все предлагаемые здесь решения, улучшения не было, функция, определенная пользователем, не перерасчитывалась, несмотря на наличие Application.Volatile, использование комбинаций клавиш пересчета и т.д. Однако я понял, что мое определение функции виновато в том, что все ссылки на ячейки в он недостаточно квалифицирован для правильной работы, когда лист, содержащий эту функцию, не был активным листом, например, сменой ячеек (a, b) на Application.Caller.Worksheet.Cells(a, b) полностью устранена проблема! Я считаю, что это решение, потому что, когда лист, содержащий мою функцию, не является активными ячейками листа (a, b), интерпретируется как ссылающийся на любой лист, который был активен в то время.
Ответ 8
Application.Volatile
не работает для пересчета формулы с моей собственной функцией внутри. Я использую следующую функцию:
Application.CalculateFull
Ответ 9
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